我只是想知道在应用程序关闭时是否可以删除目录?
当应用程序关闭时,有没有一种简单的方法可以做某事?
目前我的应用程序在运行时下载类文件,所以我真正想要的是从客户端系统中删除它们。
到目前为止我已经尝试过
File directory = new File("macros/bin/");
directory.deleteOnExit();
以及在运行时删除下载的启动文件(显然无法完成,因为它需要它们才能运行)。
你可以试试这个:
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
/* Delete your file here. */
}
});
很大程度上取决于您的程序如何结束。
您应该使用Apache Commons IO执行以下操作:
Runtime.getRuntime().addShutdownHook(new Thread(() -> FileUtils.deleteQuietly(fileOrDir)));
注意: FileUtils.forceDeleteOnExit 实现是有缺陷的:它在注册目录的过程中注册要删除的文件,因此如果稍后添加文件,它将无法删除目录。
只是为了记录,javadoc说directory.deleteOnExit()
应该可以工作......该方法应该适用于目录。但是,方法可能会失败,因为该目录在尝试删除它时不为空......并且操作系统通常不会让您删除非空目录。
解决方案是调用deleteOnExit()
用户下载的文件。您必须在通话后执行此操作。directory.deleteOnExit()
请参阅 javadoc 了解原因。
话虽如此,显式关闭挂钩是一种更强大的方法。
你可以使用这个:org.apache.commons.io.FileUtils.forceDeleteOnExit(File)
/*
* Schedules a file to be deleted when JVM exits.
* If file is directory delete it and all sub-directories.
*/
FileUtils.forceDeleteOnExit(File)
限制:不幸的是,这仅在调用
后没有在目录内创建其他文件和/或文件夹时才有效。forceDeleteOnExit
这对我有用。一个递归函数。
public static void makeVolatile(File folder)
{
folder.deleteOnExit();
for(File f : folder.listFiles())
{
if(f.isDirectory())
makeVolatile(f);
else
f.deleteOnExit();
}
}