15

我只是想知道在应用程序关闭时是否可以删除目录?

当应用程序关闭时,有没有一种简单的方法可以做某事?

目前我的应用程序在运行时下载类文件,所以我真正想要的是从客户端系统中删除它们。

到目前为止我已经尝试过

File directory = new File("macros/bin/");
directory.deleteOnExit();

以及在运行时删除下载的启动文件(显然无法完成,因为它需要它们才能运行)。

4

5 回答 5

22

你可以试试这个:

Runtime.getRuntime().addShutdownHook(new Thread() {

      @Override
      public void run() {
        /* Delete your file here. */
      }
 });

很大程度上取决于您的程序如何结束。

于 2012-06-22T23:12:20.813 回答
10

您应该使用Apache Commons IO执行以下操作:

Runtime.getRuntime().addShutdownHook(new Thread(() -> FileUtils.deleteQuietly(fileOrDir)));

注意: FileUtils.forceDeleteOnExit 实现是有缺陷的:它在注册目录的过程中注册要删除的文件,因此如果稍后添加文件,它将无法删除目录。

于 2016-02-04T22:32:07.317 回答
9

只是为了记录,javadoc说directory.deleteOnExit()应该可以工作......该方法应该适用于目录。但是,方法可能会失败,因为该目录在尝试删除它时不为空......并且操作系统通常不会让您删除非空目录。

解决方案是调用deleteOnExit()用户下载的文件。您必须在通话后执行此操作。directory.deleteOnExit()请参阅 javadoc 了解原因。

话虽如此,显式关闭挂钩是一种更强大的方法。

于 2012-06-23T01:06:28.203 回答
4

你可以使用这个: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

于 2017-08-27T13:21:51.003 回答
0

这对我有用。一个递归函数。

public static void makeVolatile(File folder)
{
    folder.deleteOnExit();
    for(File f : folder.listFiles())
    {
        if(f.isDirectory())
            makeVolatile(f);
        else
            f.deleteOnExit();
    }
}
于 2018-07-02T06:25:05.400 回答