如何在 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

相关文章