沉默之声0619 2014-09-11 09:43 采纳率: 0%
浏览 716

java 封装流关闭的疑问

BufferedWriter writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8"));
writer.write("

"
+ context);
writer.flush();
logger.debug("写文件成功,[filePath=" + filePath + "]");
} finally {
if (writer != null) {
writer.close();
}
}

为什么这段代码,只用writer.close();就把流关闭了,
new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8")这些new出来的流对象为什么不用关闭?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 16:49
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Java中,OutputStreamWriter是一个字节输出流,它将数据写入到文件中。因此,在使用完之后,你不需要手动关闭这个流。

    然而,如果在处理流的过程中有一些其他操作(例如读取或写入),那么你应该确保在完成所有操作后才关闭流。这样可以避免内存泄漏或其他潜在的问题。

    以下是一个简单的示例:

    try (FileOutputStream fos = new FileOutputStream(filePath)) {
        // 流中的其他操作...
    } finally {
        if (writer != null) {
            writer.close();
        }
    }
    

    在这个例子中,我们首先创建了一个FileOutputStream来写入文件。然后,我们在finally块中检查是否已经有一个BufferedWriter实例被创建,并且它不是null。如果是,则关闭它。

    这确保了即使在处理流的过程中有其他操作,也不会忘记关闭流。

    评论

报告相同问题?