Behandeln Sie EOFException in Java
- Java EOFException als Unterklasse von Java IOException
- die Java-EOFException
- Vermeiden Sie die EOFException beim Lesen aus dem Stream in Java
In diesem Artikel wird Java EOFException als Unterklasse von Java IOException und die Handhabung von EOFException in Java erläutert.
Java EOFException als Unterklasse von Java IOException
Die Java EOFException ist eine Unterklasse oder ein bestimmter Typ von Java IOException, daher sollten wir die IOException kennen, um EOFException zu verstehen.
Java löst die IOException aus, um zu signalisieren, dass während der Ausführung des Programms eine Unterbrechung aufgrund einer Eingabe- oder Ausgabeoperation aufgetreten ist.
Die IOException ist eine geprüfte Ausnahme, was bedeutet, dass wir die Ausnahme korrekt behandeln müssen. Wir können Ausnahmen behandeln, indem wir einen try/catch
-Block verwenden oder die Ausnahme erneut auslösen.
Wenn wir die Ausnahmen nicht behandeln, behandelt die JVM die Ausnahme und beendet die Ausführung des Programms.
Beispiele für Java-IOException
Möglicherweise lesen wir die Daten aus einem Stream, und ein anderes Programm schließt den Stream während der Operation. In diesem Fall löst Java eine IOException aus, indem es ein IOException-Klassenobjekt wirft.
Andere Beispiele für ausgelöste IOException sind Netzwerkfehler beim Lesen vom Server, Unfähigkeit, in eine Datei zu schreiben, weil zu wenig Speicherplatz vorhanden ist, und andere Dateiverarbeitungsvorgänge.
Beispiel:
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class ExceptionExample {
public static void main(String[] args) {
File file = new File("MyFile.txt", "r");
try {
FileReader fr = new FileReader(file.getAbsoluteFile());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ausgabe:
java.io.FileNotFoundException: /home/stark/eclipse-workspace-java/JavaArticles/MyFile.txt/r (No such file or directory)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
at java.base/java.io.FileReader.<init>(FileReader.java:75)
at ExceptionExample.main(ExceptionExample.java:12)
Beachten Sie, dass der Code den try/catch
-Block verwendet, um die Ausnahme zu behandeln.
Wir müssen auch beachten, dass das IOException-Objekt in den meisten Fällen nicht direkt geworfen wird. Stattdessen wird eines seiner Unterklassenobjekte gemäß der aufgetretenen Ausnahme ausgelöst.
die Java-EOFException
Ein Java-Programm löst eine EOF-Ausnahme (End Of File) aus, wenn die Ausführung unerwartet das Ende der Datei oder das Ende des Streams erreicht. Diese Ausnahme tritt auf, wenn wir Inhalte aus Dateien mit Stream-Objekten lesen.
Wenn das Ende der Datei erreicht ist, sollte sie beendet werden. Wenn das Programm jedoch weiterhin versucht, die Datei zu lesen, löst Java die EOFException aus.
Dieser Ausnahmetyp ist auch eine geprüfte Ausnahme.
Beispiel:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class ExceptionExample {
public static void main(String[] args) {
File file = new File("/home/stark/eclipse-workspace-java/JavaArticles/src/MyFile.txt");
try {
DataInputStream dis = new DataInputStream(new FileInputStream(file));
int data;
while (true) {
data = dis.readInt();
System.out.println(data);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (EOFException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ausgabe:
1629512224
1663067168
1696622112
1730177056
1763732000
1797286944
1830842144
java.io.EOFException
at java.base/java.io.DataInputStream.readInt(DataInputStream.java:397)
at ExceptionExample.main(ExceptionExample.java:20)
Im Beispiel liest der Code kontinuierlich eine Datei mithilfe eines Streams in einer Endlosschleife. Daher versucht der Code auch nach Erreichen des Dateiendes, aus dem Stream zu lesen.
Aus diesem Grund erhalten wir die EOFException.
Beachten Sie, dass der Code die EOFException mit dem try/catch
-Block behandelt und den Stack-Trace oder den Trace der Ausführungen ausgibt, die zur Ausnahme geführt haben.
Vermeiden Sie die EOFException beim Lesen aus dem Stream in Java
Wir können die EOFException im Code vermeiden, wenn wir die Operation zum Lesen der Datei korrekt beenden, sobald das Ende der Datei erreicht ist.
Sehen wir uns die Änderungen im obigen Beispielcode an, um die EOFException zu vermeiden.
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class ExceptionExample {
public static void main(String[] args) {
File file = new File("/home/stark/eclipse-workspace-java/JavaArticles/src/MyFile.txt");
int data = 0;
try {
DataInputStream dis = new DataInputStream(new FileInputStream(file));
while (dis.available() > 4) {
data = dis.readInt();
System.out.println(data);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (EOFException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ausgabe:
1629512224
1663067168
1696622112
1730177056
1763732000
1797286944
1830842144
Sie können sehen, dass der Code keine Ausnahme auslöst. Der Code definiert eine Bedingung, dass die Schleife beendet wird, wenn weniger als 4 Bytes im Stream vorhanden sind.
Dies liegt daran, dass die Größe der Ganzzahl in Java 4 Byte beträgt. Sie können Ihre Bedingungen zum Beenden der Leseoperationen entsprechend definieren.
Alternativ können Sie einen catch
-Block verwenden, um die Leseoperationen zu beenden, nachdem die Ausnahme ausgelöst wurde, aber dies sollte nicht bevorzugt werden. Sie können jedoch den catch
-Block verwenden, um unerwartete Eingaben zu vermeiden.
Verwandter Artikel - Java Exception
- Ausnahme bei ungültiger Eingabe in Java
- Ausnahme im Hauptthread Java.Util.NoSuchElementException: Keine Zeile gefunden
- Ausnahme im Thread AWT-EventQueue-0 java.lang.NullPointerException
- Beheben Sie die Java.Net.BindException: Adresse wird bereits verwendet: Bind
- Der Java-Gateway-Prozess wurde beendet, bevor seine Portnummer gesendet wurde
- Java Throwable vs. Ausnahmeklasse