在JAVA中终止程序时捕获异常

在JAVA中终止程序时捕获异常,java,exception-handling,Java,Exception Handling,有办法做到这一点吗 我正在编写一个需要迭代很长时间的程序,在这样做时,它应该写入文件。我希望在手动终止程序后立即关闭流,这样做可以避免由于未关闭流而丢失数据的风险。应该有一种处理异常的方法,但我不确定。非常感谢您的任何建议 主要感谢您: try { startapp(); } finally { closeAll(); } 在closeAll()中,您要做的就是安全关机 即使出现异常,finally块中的代码也会执行。在main中: try { startapp(); } f

有办法做到这一点吗

我正在编写一个需要迭代很长时间的程序,在这样做时,它应该写入文件。我希望在手动终止程序后立即关闭流,这样做可以避免由于未关闭流而丢失数据的风险。应该有一种处理异常的方法,但我不确定。非常感谢您的任何建议

主要感谢您

try {
   startapp();
} finally {
   closeAll();
}
在closeAll()中,您要做的就是安全关机 即使出现异常,finally块中的代码也会执行。

在main中:

try {
   startapp();
} finally {
   closeAll();
}
在closeAll()中,您要做的就是安全关机
即使出现异常,finally块中的代码也会执行。

使用异常来控制程序执行,您描述的方式是糟糕的设计。最好使用关机挂钩

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

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

使用异常来控制程序执行,您描述的方式是糟糕的设计。最好使用关机挂钩

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

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

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

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

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

谢谢大家的帮助

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

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

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

谢谢大家的帮助

使用try finally子句,在
finally
块中关闭流。或者,如果您使用的是Java 7,请使用.try finally子句,其中流在
finally
块中关闭。或者,如果您使用的是Java 7,请使用。。。但是我找到了一条出路,我会在几秒钟内发布它。这是我的作品!只有当你调用System.exit()你永远不应该做的事情时,它才会不起作用。或者当虚拟机因内部错误而崩溃时,它无法工作。。。但是我找到了一条出路,我会在几秒钟内发布它。这是我的作品!只有当你调用System.exit()你永远不应该做的事情时,它才会不起作用。或者当虚拟机因内部错误而崩溃时,这不是您问题的答案!当您不再需要该文件时,请关闭该文件。这不是你问题的答案!当您不再需要该文件时,请关闭该文件。out.close()我试图测试这个,但无法编译。。。尽管如此,我还是发现了问题。上面的代码确实为我编译并工作。你遇到了什么问题?我试图测试这个,但我无法编译。。。尽管如此,我还是发现了问题。上面的代码确实为我编译并工作。你遇到了什么问题?