File file = new File("result.csv");
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
如果我们在写完成后没有关闭缓冲的writer对象会怎样?我的意思是如果我们错过了bw.close()?
答案 0 :(得分:4)
如果您打开许多文件,并且如果您不关闭它们,您的操作系统将在一段时间后无法再打开文件。
此外,虽然您的BufferedWriter
尚未进行垃圾回收,但就您的操作系统而言,它写入的文件仍会保持打开状态。如果是Windows,则在文件句柄关闭之前,您将无法删除文件,无论是BufferedWriter
最终被垃圾收集还是退出JVM。
BufferedWriter.close()
将缓冲区刷新到基础流,因此如果您忘记flush()
并且未关闭,则您的文件可能没有您写入的所有文本。
BufferedWriter.close()
也关闭了包装的Writer。当这是一个FileWriter时,这将最终关闭FileOutputStream
并告诉操作系统您已完成写入文件。
垃圾收集器将自动调用close()
,而不是BufferedWriter
或包装的FileWriter,而是FileOuputStream
。因此操作系统会很高兴,但您必须等待GC。
但是,您总是希望在不再需要时尽快释放操作系统资源。这适用于打开文件,数据库连接,打印队列......任何事情。请相信我。
BufferedWriter.close()
确实清除了内部字符缓冲区,因此即使BufferedWriter
本身仍在范围内,内存也可用于垃圾回收。
查看here了解详情