迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

修复 Java 错误 java.io.IOException: Stream Closed

作者:迹忆客 最近更新:2023/07/12 浏览次数:

本篇文章我们将找出在 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 构造函数以追加模式创建指定文件,然后调用 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 closeed 错误

第二种解决方案是将 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

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

使用 Java 连接 FTPS 服务器

发布时间:2023/07/14 浏览次数:76 分类:Java

安全文件传输协议 (FTPS) 是文件传输协议 (FTP) 的安全版本,它使用 SSL/TLS 加密来保护客户端和服务器之间传输的数据。 本文将介绍如何使用 Java 安全通道 (JSSE) API 连接到 Java 中的 FTPS 服务器。

使用 Java 创建 X.509 证书

发布时间:2023/07/14 浏览次数:107 分类:Java

X.509 是一种广泛使用的公钥基础设施 (PKI) 标准,用于保护和验证互联网上的交易。本文将教我们如何使用 Java 创建 X.509 证书。

Java 中错误 Unsupported Major Minor Version

发布时间:2023/07/14 浏览次数:68 分类:Java

出现 Unsupported Major.minor version 错误或 Java.lang.UnsupportedClassVersionError 的原因是运行时 JDK 较低,编译时 JDK 较高。 本篇文章介绍如何解决Java中不支持的major.minor版本。

Java 中 Could Not Find Java SE Runtime Environment 错误

发布时间:2023/07/14 浏览次数:149 分类:Java

当安装了运行时环境时,即 Java 找不到主 java.dll 文件时,可能会出现“Could not find Java SE Runtime Environment”错误。 本篇文章介绍如何解决 Java 中的“Could not find Java SE Runtime Environment”错误。

解决 Java Lang Index Out of Bounds Exception 异常

发布时间:2023/07/14 浏览次数:62 分类:Java

本篇文章我们将讨论考虑数组和 ArrayList 的 IndexOutOfBoundsException 错误。 我们还将了解导致此错误的原因以及最后如何解决它。java.lang.IndexOutOfBoundsException 的原因

修复 Java 中无法打开 jvm.cfg 的问题

发布时间:2023/07/14 浏览次数:133 分类:Java

有时,我们认为一切都按预期进行,但有些问题却隐藏在幕后。 今天,我们将讨论类似的情况并确定可能的解决方案。Java 中的无法打开 jvm.cfg 错误 当我们将计算机更新到 Windows 10 但后来由于

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便