如何在 java 中处理 EOFException?
javaobject oriented programmingprogramming更新于 2024/6/30 3:01:00
在某些情况下读取文件内容时,如果到达文件末尾,则会抛出 EOFException。
特别是,使用输入流对象读取数据时会抛出此异常。在其他情况下,到达文件末尾时将抛出特定值。
示例
让我们考虑 DataInputStream 类,它提供了各种方法,例如 readboolean()、readByte()、readChar() 等,以读取原始值。使用这些方法从文件读取数据时,如果到达文件末尾,则会抛出 EOFException。
import java.io.DataInputStream; import java.io.FileInputStream; public class EOFExample { public static void main(String[] args) throws Exception { //使用 readChar() 方法从上面创建的文件读取 DataInputStream dis = new DataInputStream(new FileInputStream("D:\data.txt")); while(true) { char ch; ch = dis.readChar(); System.out.print(ch); } } }
运行时异常
Hello how are youException in thread "main" java.io.EOFException at java.io.DataInputStream.readChar(Unknown Source) at SEPTEMBER.remaining.EOFExample.main(EOFExample.java:11)
处理 EOFException
使用 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 { //从用户读取数据 byte[] buf = " Hello how are you".getBytes(); //使用 DataOutputStream 将其写入文件 DataOutputStream dos = new DataOutputStream(new FileOutputStream("D:\data.txt")); for (byte b:buf) { dos.writeChar(b); } dos.flush(); System.out.println("Data written successfully"); } }
输出
Data written successfully
以下是在 Java 中处理 EOFException 的另一种方法 −
import java.io.DataInputStream; import java.io.EOFException; import java.io.FileInputStream; import java.io.IOException; public class HandlingEOF { public static void main(String[] args) throws Exception { DataInputStream dis = new DataInputStream(new FileInputStream("D:\data.txt")); while(true) { char ch; try { ch = dis.readChar(); System.out.print(ch); } catch (EOFException e) { System.out.println(""); System.out.println("End of file reached"); break; } catch (IOException e) { } } } }
输出
Hello how are you End of file reached