Java缓冲写入程序


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本身仍在作用域中,内存也可以用于垃圾收集。

查看此处了解更多详细信息

最新更新