在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(); } }