java.io.IOException 수정: 스트림 종료 오류

Mehvish Ashiq 2023년10월12일
  1. java.io.IOException: Stream closed 오류가 발생하는 이유
  2. 새 스트림을 생성하여 java.io.IOException: Stream closed 오류 수정
  3. close()writeToFile() 외부로 이동하여 java.io.IOException: Stream closed 오류 수정
java.io.IOException 수정: 스트림 종료 오류

오늘은 Java 프로그래밍에서 코딩 중 java.io.IOException: Stream closed 오류가 발생하는 원인에 대해 알아보도록 하겠습니다. 또한 코드 예제를 통해 이 오류를 수정할 수 있는 두 가지 가능한 솔루션을 탐색합니다.

java.io.IOException: Stream closed 오류가 발생하는 이유

예제 코드(오류 발생):

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

java.io.IOException: Stream closed 오류가 발생하는 이유를 찾기 위해 코드를 이해해 봅시다. 그런 다음 솔루션으로 이동합니다.

이 코드 스니펫은 java.io 패키지에 있는 FileWriter 클래스를 사용하며 지정된 파일에 문자 형식으로 데이터를 쓰는 데 사용됩니다. 지정된 위치에 파일이 없으면 지정된 파일을 생성하고 열어 둡니다.

파일이 이미 있으면 FileWriter가 파일을 대체합니다.

main() 메서드 내에서 FileWriter 생성자를 호출하여 append 모드에서 지정된 파일을 생성한 다음 writeToFile() 메서드를 두 번 호출하여 주어진 데이터를 file.txt 파일에 씁니다. .

첫 번째 호출에서 writeToFile() 메서드는 데이터를 file.txt에 쓰고 FileWriter의 데이터를 플러시한 다음 닫습니다. close() 메서드를 호출하여 스트림을 닫았다는 점에 유의하십시오.

두 번째 호출에서 FileWriter 개체는 스트림이 닫혀 있기 때문에 쓰기로 되어 있는 파일을 찾을 수 없습니다. 따라서 writeToFile() 메서드에 대한 두 번째 호출로 인해 이 오류가 발생합니다.

이 오류를 수정하는 두 가지 해결책이 있습니다. 둘 다 코드 샘플과 함께 아래에 제공됩니다.

새 스트림을 생성하여 java.io.IOException: Stream closed 오류 수정

첫 번째 솔루션은 FileWriter 개체를 writeToFile() 함수로 이동하여 지정된 파일에 쓰려고 할 때마다 새 스트림을 만드는 것입니다.

예제 코드:

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

출력(file.txt의 데이터):

Hi! Mehvish Ashiq
Hello! Tahir Raza

close()writeToFile() 외부로 이동하여 java.io.IOException: Stream closed 오류 수정

두 번째 솔루션은 close() 메서드를 writeToFile() 함수 외부로 이동하는 것인데, 이는 솔루션 1에 비해 좋은 접근 방식으로 보입니다.

예제 코드:

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

출력(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

관련 문장 - Java Error