程序被迫退出时创建异常的方法?

时间:2014-11-26 16:18:38

标签: java exception exception-handling exit

我正在尝试制作一个简单的Java wordcounting程序。

当它读取Microsoft Office文件时,它首先读取XML文件的文本(Microsoft Office文件实际上是压缩的xml文件的捆绑!)然后将它们读取到名为“转换”的文件夹中。

我希望在程序结束后立即删除“已转换”,所以我添加了一个

new File("converted").deleteOnExit();

这样做很好。

但是,如果程序的用户在命令提示符下按Ctrl + C,则程序将提前退出,并且不会删除该文件夹。

我想知道如果程序退出,是否有办法抛出异常。这似乎不太可能,因为强制退出程序可能会停止任何代码,但我想知道这是否可行。然后,我将能够处理异常并正确退出程序,以便删除目录。我的意思是,我可以补充一下:

catch(ExitException e) {    // if the exception is called "ExitException"
    System.err.format("Program ended unexpectedly.%n");
    System.exit(-1);        // this line so that the folder can delete
}

(我理解的方式是,只有在调用System.exit()时才会删除该文件夹。如果我错了,请纠正我。)

感谢。

1 个答案:

答案 0 :(得分:1)

没有办法让它在^C(控件C)上抛出异常,但是当程序以任何方式退出时,您可以运行代码,如下所示。

尝试使用关机挂钩:Runtime.getRuntime().addShutdownHook()甚至应该在^C上运行。

请注意,这不会在那里定义的非常具体的情况下运行(SIGKILL),但它会处理大多数较低的事情。

请尝试此操作(在程序中的某个位置运行一次):

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() {
        try {
            new File("converted").delete();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

摆脱你的new File("converted").deleteOnExit();