Nicht gemeldete Ausnahme auflösen IOException muss abgefangen oder deklariert werden, um in Java ausgelöst zu werden
-
Demonstration einer nicht gemeldeten
IOException
-
Verwenden Sie
try-catch
, um nicht gemeldeteIOException
abzufangen -
Verwenden Sie das Schlüsselwort
throws
, umIOException
zu beseitigen
Dieses Tutorial demonstriert eine weitere Kompilierzeit-Ausnahme mit der Aufschrift nicht gemeldete Ausnahme ioexception; muss gefangen oder für geworfen erklärt werden
. Wir werden auch über mögliche Ursachen und Lösungen anhand von Beispielprogrammen informiert.
Demonstration einer nicht gemeldeten IOException
Beispielcode:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestClass {
public static void main(String[] args) {
BufferedReader inputFile = null;
PrintWriter outputFile = null;
String inputFileName = "C:\\New folder\\inputFile.txt";
String outputFileName = "C:\\New folder\\outputFile.txt";
try {
inputFile = new BufferedReader(new FileReader(inputFileName));
outputFile = new PrintWriter(new FileWriter(outputFileName));
String lineOfText = inputFile.readLine();
while (lineOfText != null) {
if (lineOfText.contains("x")) {
lineOfText = lineOfText.replaceAll("x"
+ ".*",
"\"Updated\"");
}
outputFile.println(lineOfText);
lineOfText = inputFile.readLine();
}
} catch (IOException ioe) {
System.err.println("Caught IOException: " + ioe.getMessage());
} finally {
if (inputFile != null) {
inputFile.close(); //<------This line causes this exception
}
if (outputFile != null) {
outputFile.close();
}
}
}
}
Im obigen Code lesen wir Daten aus der angegebenen Eingabedatei; Suchen Sie nach dem Buchstaben x
. Sobald es gefunden wird, ersetzen wir das x
und den nachfolgenden Text in derselben Zeile durch das in doppelte Anführungszeichen (" "
) eingeschlossene Wort Updated
.
Abschließend schließen wir beide Dateien (Eingabe und Ausgabe).
Die Zeile inputFile.close();
auf die wir im obigen Codebeispiel verweisen, verursacht eine nicht gemeldete IOException
, die abgefangen oder geworfen werden muss. Was bedeutet das?
Es bedeutet inputFile.close();
verursacht die IOException
, die wir mit dem try-catch
-Block (man nennt es Exception abfangen) oder mit dem Schlüsselwort throws
(es heisst Exception is thrown) loswerden kann. Wie es geht?
Lassen Sie uns mit Codebeispielen unten lernen.
Verwenden Sie try-catch
, um nicht gemeldete IOException
abzufangen
Beispielcode:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestClass {
public static void main(String[] args) {
BufferedReader inputFile = null;
PrintWriter outputFile = null;
String inputFileName = "C:\\New folder\\inputFile.txt";
String outputFileName = "C:\\New folder\\outputFile.txt";
try {
inputFile = new BufferedReader(new FileReader(inputFileName));
outputFile = new PrintWriter(new FileWriter(outputFileName));
String lineOfText = inputFile.readLine();
while (lineOfText != null) {
if (lineOfText.contains("x")) {
lineOfText = lineOfText.replaceAll("x"
+ ".*",
"\"Updated\"");
}
outputFile.println(lineOfText);
lineOfText = inputFile.readLine();
}
} catch (IOException ioe) {
System.err.println("Caught IOException: " + ioe.getMessage());
} finally {
if (inputFile != null) {
try {
inputFile.close();
} catch (IOException ioe) {
System.err.println("Caught IOException: " + ioe.getMessage());
}
}
if (outputFile != null) {
outputFile.close();
}
}
}
}
Die Eingabedatei hat folgenden Inhalt.
this is x one file
this is x two file
this is x three file
Nach dem Ausführen des Programms erhalten wir eine Ausgabedatei mit dem folgenden Inhalt.
this is "Updated"
this is "Updated"
this is "Updated"
Hier eliminieren wir die IOException
mit dem try-catch
-Block, wobei wir mit der try
-Anweisung einen bestimmten Codeblock definieren können, der während des Ausführungsprozesses auf Fehler untersucht werden muss.
Wenn bei einer bestimmten Anweisung innerhalb des try
-Blocks eine Ausnahme auftritt, wird die Ausführung angehalten und zum catch
-Block gesprungen. Es wird daher dringend empfohlen, den Code nicht innerhalb des try
-Blocks zu belassen, der keine Ausnahme auslöst.
Andererseits ermöglicht die catch
-Anweisung die Definition eines Codeblocks, der ausgeführt werden muss, wenn ein Fehler im try
-Block auftritt. Der catch
wird direkt nach dem try
-Block geschrieben.
Wir können auch mehrere catch
-Blöcke haben, je nachdem, wie viele Ausnahmen wir im jeweiligen try
-Block bekommen können.
Wir können auch eine benutzerdefinierte Nachricht schreiben, während wir die Ausnahme behandeln. Nun stellt sich die Frage, wie diese Ausnahmen gehandhabt werden.
Die Java Virtual Machine (JVM) prüft, ob eine Ausnahme behandelt wird oder nicht. Ist dies nicht der Fall, dient die JVM mit dem standardmäßigen Ausnahmehandler, der einige der unten aufgeführten Aufgaben ausführt:
- Es gibt die Beschreibung einer Ausnahme in der Ausgabekonsole des Programms aus.
- Es druckt auch den Stack-Trace in der Ausgabekonsole des Programms. Der Stack-Trace ist die Hierarchie der Methoden, in der eine Ausnahme aufgetreten ist.
- Es führt zum Abbruch des Programms.
Andererseits wird der normale Ablauf der Anwendung aufrechterhalten, wenn ein Anwendungsprogrammierer die Ausnahme behandelt hat, was bedeutet, dass der verbleibende Code ausgeführt wird.
Verwenden Sie das Schlüsselwort throws
, um IOException
zu beseitigen
Beispielcode:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestClass {
public static void main(String[] args) throws IOException {
BufferedReader inputFile = null;
PrintWriter outputFile = null;
String inputFileName = "C:\\New folder\\inputFile.txt";
String outputFileName = "C:\\New folder\\outputFile.txt";
try {
inputFile = new BufferedReader(new FileReader(inputFileName));
outputFile = new PrintWriter(new FileWriter(outputFileName));
String lineOfText = inputFile.readLine();
while (lineOfText != null) {
if (lineOfText.contains("x")) {
lineOfText = lineOfText.replaceAll("x"
+ ".*",
"\"Updated\"");
}
outputFile.println(lineOfText);
lineOfText = inputFile.readLine();
}
} catch (IOException ioe) {
System.err.println("Caught IOException: " + ioe.getMessage());
} finally {
if (inputFile != null) {
inputFile.close();
}
if (outputFile != null) {
outputFile.close();
}
}
}
}
Der Inhalt einer Eingabedatei ist wie folgt.
this is x one file
this is x two file
this is x three file
Die Ausgabedatei hat den unten angegebenen aktualisierten Inhalt.
this is "Updated"
this is "Updated"
this is "Updated"
Dieser Code ist derselbe wie im vorherigen Abschnitt, wo wir nur den try-catch
-Block verwenden, um die Ausnahme zu behandeln. Hier verwenden wir throws
, um eine Ausnahme zu deklarieren; wir können auch mehrere Ausnahmen deklarieren, die durch ein Komma (``) getrennt sind.
Das Schlüsselwort throws
informiert den Anwendungsprogrammierer, dass bei dieser Methode eine Ausnahme auftreten kann. Denken Sie daran, dass das Schlüsselwort throws
während der Definition der Funktion geschrieben wird (siehe im angegebenen Beispielcode).
Daher ist es gut und wird dringend empfohlen, dass der Programmierer diese Ausnahme im Code behandelt, um den normalen Ausführungsfluss aufrechtzuerhalten. Andernfalls wird das Programm beendet. Lassen Sie es uns anhand des Beispielcodes verstehen.
Kopieren Sie den folgenden Code und führen Sie ihn aus. Stellen Sie sicher, dass wir einen falschen Pfad für die Eingabedatei haben.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestClass {
public static void main(String[] args) throws IOException {
BufferedReader inputFile = null;
PrintWriter outputFile = null;
String inputFileName = "C:\\New folder\\input.txt";
String outputFileName = "C:\\New folder\\outputFile.txt";
try {
inputFile = new BufferedReader(new FileReader(inputFileName));
outputFile = new PrintWriter(new FileWriter(outputFileName));
String lineOfText = inputFile.readLine();
while (lineOfText != null) {
if (lineOfText.contains("x")) {
lineOfText = lineOfText.replaceAll("x"
+ ".*",
"\"Updated\"");
}
outputFile.println(lineOfText);
lineOfText = inputFile.readLine();
}
} catch (IOException ioe) {
System.err.println("Caught IOException: " + ioe.getMessage());
} finally {
if (inputFile != null) {
inputFile.close();
}
if (outputFile != null) {
outputFile.close();
}
}
System.out.println("Continue execution!");
}
}
AUSGANG:
Caught IOException: C:\New folder\input.txt (The system cannot find the file specified)
Continue execution!
Wir sehen die Ausgabe wie oben angegeben. Das Programm setzt die Codeausführung fort, da wir die Ausnahme behandelt haben.
Kommentieren Sie nun die Blöcke try
, catch
und finally
wie folgt aus und führen Sie den Code erneut aus. Stellen Sie sicher, dass wir einen falschen Pfad für eine Eingabedatei haben.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class TestClass {
public static void main(String[] args) throws IOException {
BufferedReader inputFile = null;
PrintWriter outputFile = null;
String inputFileName = "C:\\New folder\\input.txt";
String outputFileName = "C:\\New folder\\outputFile.txt";
// try {
inputFile = new BufferedReader(new FileReader(inputFileName));
outputFile = new PrintWriter(new FileWriter(outputFileName));
String lineOfText = inputFile.readLine();
while (lineOfText != null) {
if (lineOfText.contains("x")) {
lineOfText = lineOfText.replaceAll("x"
+ ".*",
"\"Updated\"");
}
outputFile.println(lineOfText);
lineOfText = inputFile.readLine();
}
//} catch (IOException ioe) {
// System.err.println("Caught IOException: " + ioe.getMessage());
//} finally {
if (inputFile != null) {
inputFile.close();
}
if (outputFile != null) {
outputFile.close();
}
//}
System.out.println("Continue execution!");
}
}
Das Programm beendet die Ausführung, sobald es die Ausnahme findet, und erreicht nie die folgende Codezeile.
System.out.println("Continue execution!");
Aus diesem Grund behandeln wir unsere deklarierten Ausnahmen. Denken Sie daran, dass wir nur die checked
-Ausnahmen deklarieren können, weil der Programmierer die ungeprüften Ausnahmen innerhalb des Codes behandeln kann.
Verwandter Artikel - Java Error
- Adresse wird bereits verwendet JVM_Bind-Fehler in Java
- Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden
- Ausnahme im Hauptthread Java.Lang.ClassNotFoundException in IntelliJ IDEA
- Ausnahme im Hauptthread Java.Lang.NoClassDefFoundError
- Beheben Sie das Problem, dass Java nicht installiert werden kann. Es gibt Fehler in den folgenden Schaltern
- Beheben Sie den Fehler `Es wurde keine Java Virtual Machine gefunden` in Eclipse