在Java中删除退出目录
我只是想知道在应用程序关闭时是否可以删除目录?
应用程序关闭时,有一种简单的方法可以做某事吗?
目前我的应用程序在运行时下载类文件,所以我真正想要的是从客户端系统中删除它们。
到目前为止我已经尝试过了
File directory = new File("macros/bin/"); directory.deleteOnExit();
以及下载的启动文件的运行时删除(显然无法查看,因为它需要它们才能运行)。
你可以试试这个:
Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { /* Delete your file here. */ } });
很大程度上取决于你的程序如何结束。
只是为了记录,javadoc说directory.deleteOnExit()
应该工作…该方法应该适用于目录。 但是,方法可能会失败,因为在尝试删除目录时该目录不为空……操作系统通常不允许您删除非空目录。
解决方案是为用户下载的文件调用deleteOnExit()
。 你必须在directory.deleteOnExit()
调用之后执行此操作。 请参阅javadoc了解原因。
话虽如此,显式关闭挂钩是一种更强大的方法。
您应该使用Apache Commons 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
后在目录中没有创建其他文件和/或文件夹时, forceDeleteOnExit
。
这对我有用。 递归函数。
public static void makeVolatile(File folder) { folder.deleteOnExit(); for(File f : folder.listFiles()) { if(f.isDirectory()) makeVolatile(f); else f.deleteOnExit(); } }