不关闭BufferedWriter的后果是什么

时间:2014-03-21 03:00:23

标签: java io bufferedwriter writer

假设我有BufferedWriter已写入5000行(其中一些尚未刷新)。

如果我在程序结束时没有close()这个实例会有什么后果?

3 个答案:

答案 0 :(得分:4)

如果在程序结束之前没有close(),则永远不会写入尚未写入的缓冲数据。

BufferedWriter在Java中完成所有缓冲(而不是仅仅依赖于操作系统的低级缓冲区)。因此,需要一个明确的操作来刷新缓冲区并关闭文件,因为这不会在程序退出时自动发生(主要是由于Java的GC性质以及缺少对何时和如果的保证,例如{{ 1}}被称为)。

所以finalize()的缓冲区中的任何东西都会在程序退出时仍然存在,最终会永远丢失。

当你完成它们时,你应该养成BufferedWriter流的习惯(并close()任何引用也是如此,因此GC可以丢弃对象;这不是对null的行为有任何影响,但这是一个很好的通用做法)。至少,如果您已经编写了重要数据,并且无论是否需要关闭流,都需要确保它已写入磁盘,您可以根据需要明确调用BufferedWriter

flush() can be found here的源代码,如果您想了解实施情况。

答案 1 :(得分:0)

实际上可能无法将数据写入到写入数据的任何位置。因此,你将失去尚未编写的任何东西。

这样一个问题的问题在于它让人们想知道你为什么要问。你尝试成为一个可怕的人而不是关闭你的作家?你真的这样的情况,关闭作家是你不想做的事情吗?

答案 2 :(得分:0)

如果您不喜欢关闭流,那么使用JDK 1.7中引入的try-with-resource,新功能,它将关闭所有实现Closable接口的此类对象