当用Java开发的工具启动时,它会在文件夹中创建临时文件。如果终止正确,这些文件将被删除,但如果使用kill或pkill命令终止,这些文件不会被删除。是否有任何方法可以向java进程发送信号,在终止进程之前删除这些文件?请帮我解决这个问题。提前感谢
当涉及到进程终止时,File.deleteOnExit()
似乎很脆弱。相比之下,将NIO API与StandardOpenOption.DELETE_ON_CLOSE
一起使用似乎更可靠,尽管其规范仅规定:"如果未调用close
方法,则当Java虚拟机终止时,将尽最大努力删除文件"
例如,当运行以下程序时:
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在正确删除我机器上的deleteOnClose
文件的同时保留deleteOnExit
tmp文件。
您可以添加shutdown hook并明确地清除所有需要的内容。
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
//put your shutdown code here
}
});
这实际上和java.io.File#deleteOnExit
为您所做的是一样的。