当启动使用Java开发的工具时,它会在文件夹中创建临时文件。如果正确终止这些文件将被删除,但如果使用kill或pkill命令终止,则这些文件不会被删除。有没有办法在终止进程之前向java进程发送信号以删除这些文件? 请帮我解决这个问题。 在此先感谢
答案 0 :(得分:0)
您可以添加关闭挂钩并清除所需的所有内容。
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
//put your shutdown code here
}
});
这实际上与java.io.File#deleteOnExit
为您所做的相同。
答案 1 :(得分:0)
在进程终止时,File.deleteOnExit()
似乎很脆弱。相比之下,使用带有StandardOpenOption.DELETE_ON_CLOSE
的NIO API似乎更可靠,即使它的规范只说:“如果未调用close
方法,那么尽力而为尝试用于在Java虚拟机终止“
E.g。运行以下程序时:
File f1=File.createTempFile("deleteOnExit", ".tmp");
f1.deleteOnExit();
final Path f2 = Files.createTempFile("deleteOnClose", ".tmp");
FileChannel ch = FileChannel.open(f2, StandardOpenOption.DELETE_ON_CLOSE);
System.out.println(f1);
System.out.println(f2);
LockSupport.parkNanos(Long.MAX_VALUE);
// the following statement is never reached, but it’s here to avoid
// early cleanup of the channel by garbage collector
ch.close();
并在parkNanos
挂起时终止进程,JVM会在正确删除计算机上的deleteOnExit
文件时保留deleteOnClose
tmp文件。