我正在尝试制作一个简单的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()
时才会删除该文件夹。如果我错了,请纠正我。)
感谢。
答案 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();
。