我只是想知道是否可以删除一个目录,当应用程序被关闭?
有没有一种简单的方法,当应用程序被关闭做些什么?
目前我的应用程序下载运行时的类文件,所以我真正要的是什么,从客户端系统中删除它们。
到目前为止,我已经试过
File directory = new File("macros/bin/");
directory.deleteOnExit();
除了作为一个删除下载的启动文件(这显然无法做到看到它需要它们才能运行)的运行时间。
我只是想知道是否可以删除一个目录,当应用程序被关闭?
有没有一种简单的方法,当应用程序被关闭做些什么?
目前我的应用程序下载运行时的类文件,所以我真正要的是什么,从客户端系统中删除它们。
到目前为止,我已经试过
File directory = new File("macros/bin/");
directory.deleteOnExit();
除了作为一个删除下载的启动文件(这显然无法做到看到它需要它们才能运行)的运行时间。
你可以试试这个:
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
/* Delete your file here. */
}
});
这在很大程度上取决于你的程序是怎样的结局。
只是为了记录在案,javadoc中说, directory.deleteOnExit()
应该工作...方法理应适用于目录。 然而,方法可能失败,因为目录不是在它试图将其删除的点空......和OS通常不会让你删除一个非空目录。
解决办法是调用deleteOnExit()
的用户下载过的文件。 你有后,要做到这一点directory.deleteOnExit()
调用。 请参阅为什么的javadoc。
话虽如此,明确关闭挂钩是一种更可靠的方法。
你应该做使用以下的Apache下议院IO :
Runtime.getRuntime().addShutdownHook(new Thread(() -> FileUtils.deleteQuietly(fileOrDir)));
注:FileUtils.forceDeleteOnExit实现是有缺陷的:它的目录登记注册过程中要删除的文件,因此,如果文件是后来添加它将无法删除该目录。
您可以使用此: 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();
}
}