如何在 Java 中读取 DataInputStream 直到文件末尾而不捕获 EOFException 异常?
java 8object oriented programmingprogramming
在某些情况下读取文件内容时,到达文件末尾会抛出 EOFException 异常。
尤其是在使用输入流对象读取数据时会抛出此异常。在其他情况下,到达文件末尾会抛出一个特定值。
DataInputStream 类提供了各种方法来读取原始值,例如 readboolean()、readByte()、readChar() 等。使用这些方法从文件读取数据时,如果到达文件末尾,则会抛出 EOFException 异常。
示例
以下程序演示了如何在 Java 中处理 EOFException 异常。
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Scanner; public class AIOBSample { public static void main(String[] args) throws Exception { //从用户读取数据 Scanner sc = new Scanner(System.in); System.out.println("Enter a String: "); String data = sc.nextLine(); byte[] buf = data.getBytes(); //使用 DataOutputStream 将其写入文件 DataOutputStream dos = new DataOutputStream(new FileOutputStream("D:\data.txt")); for (byte b:buf) { dos.writeChar(b); } dos.flush(); //使用 readChar() 方法从上面创建的文件中读取 DataInputStream dis = new DataInputStream(new FileInputStream("D:\data.txt")); while(true) { char ch; ch = dis.readChar(); System.out.print(ch); } } }
输出
Enter a String: hello how are you helException in thread "main" lo how are youjava.io.EOFException at java.io.DataInputStream.readChar(Unknown Source) at MyPackage.AIOBSample.main(AIOBSample.java:27)
读取 DataInputStream 而不捕获异常
使用 DataInputStream 类,您无法在未到达文件末尾的情况下读取文件内容。如果需要,您可以使用 InputStream 接口的其他子类。
示例
在下面的示例中,我们重写了上述程序,使用 FileInputStream 类(而不是 DataInputStream 类)从文件读取数据。
import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Scanner; public class AIOBSample { public static void main(String[] args) throws Exception { //从用户读取数据 Scanner sc = new Scanner(System.in); System.out.println("Enter a String: "); String data = sc.nextLine(); byte[] buf = data.getBytes(); //使用 DataOutputStream 将其写入文件 DataOutputStream dos = new DataOutputStream(new FileOutputStream("D:\data.txt")); for (byte b:buf) { dos.writeChar(b); } dos.flush(); //使用 readChar() 方法从上面创建的文件中读取 File file = new File("D:\data.txt"); FileInputStream fis = new FileInputStream(file); byte b[] = new byte[(int) file.length()]; fis.read(b); System.out.println("contents of the file: "+new String(b)); } }
输出
Enter a String: Hello how are you contents of the file: H e l l o h o w a r e y o u