English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Wie kann man bis zum Ende von DataInputStream lesen, ohne EOFException zu fangen?

In einigen Fällen wird EOFException ausgelöst, wenn das Ende der Datei erreicht wird, wenn der Inhalt der Datei gelesen wird.

Besonders wird diese Ausnahme bei der Verwendung von Input-Stream-Objekten zum Lesen von Daten ausgelöst. In anderen Fällen wird eine spezifische Wert ausgelöst, wenn das Ende der Datei erreicht wird.

In der Klasse DataInputStream bietet sie verschiedene Methoden, z.B.readboolean(),readByte(),readChar()u.a. werden die ursprünglichen Werte gelesen. Wenn diese Methoden verwendet werden, um Daten aus der Datei zu lesen, wird EOFException ausgelöst, wenn das Ende der Datei erreicht wird.

Beispiel

Das folgende Programm zeigt, wie man EOFException in Java behandelt.

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 {
      //Daten vom Benutzer lesen
      Scanner sc = new Scanner(System.in);
      System.out.println("Gib einen String ein:");
      String data = sc.nextLine();
      byte[] buf = data.getBytes();
      //Schreibe es in die Datei
      DataOutputStream dos = new DataOutputStream(new FileOutputStream("D:\\data.txt"));
      for (byte b : buf) {
         dos.writeChar(b);
      }
      dos.flush();
      //Lesen aus der oben erstellten Datei mit dem readChar()-Verfahren
      DataInputStream dis = new DataInputStream(new FileInputStream("D:\\data.txt"));
      while(true) {
         char ch;
         ch = dis.readChar();
         System.out.print(ch);
      }
   }
}

Ausgabenergebnis

Gib einen String ein:
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)

keinen DataInputStream lesen, ohne die Ausnahme zu fangen

Sie könnenDataInputStreamDer Class liest den Inhalt der Datei bis zum Ende der Datei. Wenn erforderlich, können Sie andere Unterklasse des InputStream-Interface verwenden.

Beispiel

Im folgenden Beispiel verwenden wir die Klasse FileInputStream anstelle von DataInputStream, um den obigen Code zu ändern, um Daten aus der Datei zu lesen.

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 {
      //Daten vom Benutzer lesen
      Scanner sc = new Scanner(System.in);
      System.out.println("Gib einen String ein:");
      String data = sc.nextLine();
      byte[] buf = data.getBytes();
      //Schreibe es in die Datei
      DataOutputStream dos = new DataOutputStream(new FileOutputStream("D:\\data.txt"));
      for (byte b : buf) {
         dos.writeChar(b);
      }
      dos.flush();
      //Lesen aus der oben erstellten Datei mit dem readChar()-Verfahren
      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("Inhalt der Datei: ");+new String(b));
   }
}

Ausgabenergebnis

Gib einen String ein:
Hallo, wie geht es dir?
Inhalt der Datei: H e l l o h o w a r e y o u
Vielleicht gefällt Ihnen das