Java Bufferedwriter

时间:2014-03-03 08:20:13

标签: java bufferedwriter

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

如果我们在写完成后没有关闭缓冲的writer对象会怎样?我的意思是如果我们错过了bw.close()?

1 个答案:

答案 0 :(得分:4)

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

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

  • BufferedWriter.close()将缓冲区刷新到基础流,因此如果您忘记flush()并且未关闭,则您的文件可能没有您写入的所有文本。

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

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

  • 但是,您总是希望在不再需要时尽快释放操作系统资源。这适用于打开文件,数据库连接,打印队列......任何事情。请相信我。

  • BufferedWriter.close()确实清除了内部字符缓冲区,因此即使BufferedWriter本身仍在范围内,内存也可用于垃圾回收。

查看here了解详情