在Java应用程序退出时刷新

Mic*_*ael 2 java exit bufferedwriter

假设Java应用程序使用BufferedWriterAPI 写入文件(并且flush在after之后不调用write)。我猜想如果应用程序退出时System.exit缓冲区没有刷新,那么文件可能已损坏。

还假设决定退出的应用程序组件不知道该组件正在写入文件。

解决“冲洗问题”的最简单,正确的方法是什么?

Jun*_*san 5

您可以使用Runtime.addShutdownHook方法,该方法可用于添加jvm关闭钩子。这基本上是一个未启动的线程,该线程在Java虚拟机关闭时执行。

因此,如果您拥有该线程可用的文件句柄,则可以尝试关闭流并刷新输出。

注意:尽管使用此选项似乎可行,但是我相信它会在实现上遇到挑战,因为这样的事实是,调用关闭挂钩时文件句柄是否不陈旧。因此,更好的方法应该是使用完成文件操作的代码中的finally块优雅地关闭流。