Solucione java.io.IOException: error de flujo cerrado

Mehvish Ashiq 12 octubre 2023
  1. Razón que causa el error java.io.IOException: flujo cerrado
  2. Solucione el error java.io.IOException: flujo cerrado creando un nuevo flujo
  3. Solucione el error java.io.IOException: flujo cerrado moviendo close() fuera de writeToFile()
Solucione java.io.IOException: error de flujo cerrado

Hoy, descubriremos la posible causa que genera el error java.io.IOException: flujo cerrado al codificar en programación Java. También exploraremos dos posibles soluciones para corregir este error con la ayuda de ejemplos de código.

Razón que causa el error java.io.IOException: flujo cerrado

Código de ejemplo (que causa el error):

// 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

Entendamos el código para encontrar la razón que causa el error java.io.IOException: flujo cerrado. Luego, saltaremos a su solución.

Este fragmento de código usa la clase FileWriter que reside en el paquete java.io y se usa para escribir datos en forma de caracteres en el archivo especificado. Crea el archivo especificado si no existe en la ubicación dada y lo mantiene abierto.

Si el archivo ya está allí, el FileWriter lo reemplazará.

Dentro del método main(), llamamos al constructor FileWriter para crear el archivo especificado en modo append y luego llamamos al método writeToFile() dos veces para escribir los datos dados en el archivo file.txt .

En la primera llamada, el método writeToFile() escribe los datos en file.txt, vacía los datos de FileWriter y lo cierra. Tenga en cuenta que hemos cerrado la transmisión llamando al método close().

En la segunda llamada, el objeto FileWriter no puede encontrar el archivo donde se supone que debe escribir porque la transmisión está cerrada. Entonces, la segunda llamada al método writeToFile() está causando este error.

Hay dos soluciones para corregir este error. Ambos se dan a continuación con ejemplos de código.

Solucione el error java.io.IOException: flujo cerrado creando un nuevo flujo

La primera solución es crear una nueva secuencia siempre que queramos escribir en un archivo específico moviendo el objeto FileWriter a la función writeToFile().

Código de ejemplo:

// 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

SALIDA (los datos en el archivo.txt):

Hi! Mehvish Ashiq
Hello! Tahir Raza

Solucione el error java.io.IOException: flujo cerrado moviendo close() fuera de writeToFile()

La segunda solución es mover el método close() fuera de la función writeToFile(), lo que parece un buen enfoque en comparación con la Solución 1.

Código de ejemplo:

// 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

SALIDA (los datos en el archivo.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

Artículo relacionado - Java Error