Beheben Sie den Fehler java.io.IOException: Stream Closed

Mehvish Ashiq 12 Oktober 2023
  1. Ursache für den Fehler java.io.IOException: Stream closed
  2. Beheben Sie den Fehler java.io.IOException: Stream closed, indem Sie einen neuen Stream erstellen
  3. Beheben Sie den Fehler java.io.IOException: Stream closed, indem Sie close() ausserhalb von writeToFile() verschieben
Beheben Sie den Fehler java.io.IOException: Stream Closed

Heute werden wir die mögliche Ursache herausfinden, die beim Codieren in der Java-Programmierung den Fehler java.io.IOException: Stream closed generiert. Wir werden auch zwei mögliche Lösungen untersuchen, um diesen Fehler mit Hilfe von Codebeispielen zu beheben.

Ursache für den Fehler java.io.IOException: Stream closed

Beispielcode (der den Fehler verursacht):

// import libraries
import java.io.FileWriter;
import java.io.IOException;

// Test Class
public class Test {
  // this method writes the given data into the specified file
  // and closes the stream
  static void writeToFile(
      String greetings, String firstName, String lastName, FileWriter fileWriter) {
    String customizedGreetings = greetings + "! " + firstName + " " + lastName;
    try {
      fileWriter.write(customizedGreetings + "\n");
      fileWriter.flush();
      fileWriter.close();
    } catch (IOException exception) {
      exception.printStackTrace();
    }

  } // end writeToFile() method

  // main() method
  public static void main(String[] args) throws IOException {
    // creates a file in append mode and keeps it open
    FileWriter fileWriter = new FileWriter("Files/file.txt", true);

    // writeToFile() is called to write data into the file.txt
    writeToFile("Hi", "Mehvish", "Ashiq", fileWriter);
    writeToFile("Hello", "Tahir", "Raza", fileWriter);

  } // end main()

} // end Test class

Lassen Sie uns den Code verstehen, um den Grund zu finden, der den Fehler java.io.IOException: Stream closed verursacht. Dann werden wir zu seiner Lösung springen.

Dieses Code-Snippet verwendet die FileWriter-Klasse, die sich im java.io-Paket befindet und verwendet wird, um Daten in Zeichen-Form in die angegebene Datei zu schreiben. Es erstellt die angegebene Datei, wenn sie am angegebenen Ort nicht vorhanden ist, und hält sie geöffnet.

Wenn die Datei bereits vorhanden ist, wird sie vom FileWriter ersetzt.

Innerhalb der main()-Methode rufen wir den FileWriter-Konstruktor auf, um die angegebene Datei im append-Modus zu erstellen, und rufen dann zweimal die writeToFile()-Methode auf, um die angegebenen Daten in die file.txt-Datei zu schreiben .

Beim ersten Aufruf schreibt die Methode writeToFile() die Daten in die file.txt, leert die Daten des FileWriter und schliesst diese. Beachten Sie, dass wir den Stream geschlossen haben, indem wir die Methode close() aufgerufen haben.

Beim zweiten Aufruf findet das Objekt FileWriter die Datei nicht, in die es schreiben soll, weil der Stream geschlossen ist. Der zweite Aufruf der Methode writeToFile() verursacht also diesen Fehler.

Es gibt zwei Lösungen, um diesen Fehler zu beheben. Beide sind unten mit Codebeispielen angegeben.

Beheben Sie den Fehler java.io.IOException: Stream closed, indem Sie einen neuen Stream erstellen

Die erste Lösung besteht darin, einen neuen Stream zu erstellen, wenn wir in eine bestimmte Datei schreiben möchten, indem wir das Objekt FileWriter in die Funktion writeToFile() verschieben.

Beispielcode:

// import libraries
import java.io.FileWriter;
import java.io.IOException;

// Test class
public class Test {
  // this method writes the given data into the specified file
  // and closes the stream
  static void writeToFile(String greetings, String firstName, String lastName) throws IOException {
    FileWriter fileWriter = new FileWriter("Files/file.txt", true);

    String customizedGreetings = greetings + "! " + firstName + " " + lastName;

    fileWriter.write(customizedGreetings + "\n");
    fileWriter.flush();
    fileWriter.close();

  } // end writeToFile()

  // main()
  public static void main(String[] args) {
    // writeToFile() is called to write data into the file
    try {
      writeToFile("Hi", "Mehvish", "Ashiq");
      writeToFile("Hello", "Tahir", "Raza");
    } catch (IOException e) {
      e.printStackTrace();
    }

  } // end main()

} // end Test class

AUSGABE (die Daten in der file.txt):

Hi! Mehvish Ashiq
Hello! Tahir Raza

Beheben Sie den Fehler java.io.IOException: Stream closed, indem Sie close() ausserhalb von writeToFile() verschieben

Die zweite Lösung verschiebt die Methode close() aus der Funktion writeToFile(), was im Vergleich zu Lösung 1 ein guter Ansatz zu sein scheint.

Beispielcode:

// import libraries
import java.io.FileWriter;
import java.io.IOException;

// Test Class
public class Test {
  // this method writes the given data into the specified file
  static void writeToFile(
      String greetings, String firstName, String lastName, FileWriter fileWriter) {
    String customizedGreetings = greetings + "! " + firstName + " " + lastName;
    try {
      fileWriter.write(customizedGreetings + "\n");
      fileWriter.flush();
    } catch (IOException exception) {
      exception.printStackTrace();
    }
  } // end writeToFile()

  // closes the stream
  static void cleanUp(FileWriter fileWriter) throws IOException {
    fileWriter.close();
  } // end cleanUp()

  // main()
  public static void main(String[] args) throws IOException {
    // create the file in the append mode and keep it open
    FileWriter fileWriter = new FileWriter("Files/file.txt", true);

    // writeToFile() is called to write data into the file.txt
    writeToFile("Hi", "Mehvish", "Ashiq", fileWriter);
    writeToFile("Hello", "Tahir", "Raza", fileWriter);

    // close the stream
    cleanUp(fileWriter);

  } // end main()

} // end Test class

AUSGABE (die Daten in der file.txt):

Hi! Mehvish Ashiq
Hello! Tahir Raza
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

Verwandter Artikel - Java Error