0

有没有办法做到这一点?

我正在编写一个必须迭代很长时间的程序,并且在这样做的同时它应该写入文件。我想在手动终止程序后立即关闭流,这样做可以避免由于未关闭的流而丢失数据的风险。应该有一种方法可以通过异常处理来做到这一点,但我不确定。任何形式的建议都非常感谢!

谢谢

4

3 回答 3

2

主要:

try {
   startapp();
} finally {
   closeAll();
}

在 closeAll() 中,您执行安全关闭操作。即使发生异常,finally 块中的代码也会执行。

于 2012-12-09T23:34:18.693 回答
1

以您描述的方式使用异常来控制程序执行是糟糕的设计。使用关闭挂钩会好得多。

Runtime.getRuntime().addShutdownHook(new Thread() {
    @Override
    public void run() {
       // Close streams here
    }
});

这将很好地处理大多数正常的关闭,但在硬停止 (SIGKILL) 的情况下,关闭挂钩不能保证运行。但这并不比您尝试通过 finally 块关闭流更糟糕。

于 2012-12-09T23:36:09.210 回答
0

我找到了一个方法!我为此浪费了很多时间,却没有注意到程序终止时流会自动关闭...

数据没有被写入,因为我没有在 write() 方法之后使用 flush() 方法,如下所示:

out.write(line);
out.flush();

感谢大家的帮助

于 2012-12-09T23:45:27.983 回答