Java 缓冲写入器

标签 java bufferedwriter

File file = new File("result.csv");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);

如果我们在写入完成后不关闭缓冲的写入器对象会发生什么?我的意思是如果我们错过 bw.close() 怎么办?

最佳答案

如果您打开了许多文件,并且不关闭它们,一段时间后您的操作系统将无法打开更多文件。

此外,虽然您的 BufferedWriter 尚未被垃圾收集,但就您的操作系统而言,它正在写入的文件将保持打开状态。如果是 Windows,则在文件句柄关闭之前您将无法删除该文件,无论是通过 BufferedWriter 最终被垃圾回收还是通过 JVM 退出。

  • BufferedWriter.close() 将缓冲区刷新到底层流,因此如果您忘记 flush() 并且不关闭,您的文件可能会没有您写给它的所有文字。

  • BufferedWriter.close() 还会关闭包装的 Writer。当它是 FileWriter 时,这最终将关闭 FileOutputStream 并告诉操作系统您已完成对文件的写入。

  • 垃圾收集器将自动调用 close(),不是在 BufferedWriter 或包装的 FileWriter 上调用,而是在 FileOuputStream 上调用。所以操作系统会很高兴,但你必须等待GC。

  • 但是,您总是希望在不再需要操作系统资源时立即释放它们。这适用于打开的文件、数据库连接、打印队列......任何东西。相信我这一点。

  • BufferedWriter.close() 确实会清除内部字符缓冲区,以便内存可用于垃圾回收,即使 BufferedWriter 本身仍保留在范围。

检查here了解更多详情

关于Java 缓冲写入器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22141777/

相关文章:

java - 构造子串的字符串操作

java - Java中重定向到本地端口

java - 当集成测试失败时,maven 不会停止通过 Cargo 的 Glassfish 容器

java - 使用 BufferedWriter 和 JFileChooser 设置保存目录

Java 缓冲编写器不会写入所有数据

java - 简单的文件写入,但不起作用

java - LWJGL Display.update() 太慢 - 驱动程序问题?

java - 为什么在通过 REST API 调用时枚举并不总是有效?

java - 不会写入文件?

java - BufferedWriter 将随机字母写入文件(Java)