删除一个目录在Java中退出(Deleting a directory on exit in Jav

2019-07-30 02:11发布

我只是想知道是否可以删除一个目录,当应用程序被关闭?

有没有一种简单的方法,当应用程序被关闭做些什么?

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

到目前为止,我已经试过

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

除了作为一个删除下载的启动文件(这显然无法做到看到它需要它们才能运行)的运行时间。

Answer 1:

你可以试试这个:

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

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

这在很大程度上取决于你的程序是怎样的结局。



Answer 2:

只是为了记录在案,javadoc中说, directory.deleteOnExit()应该工作...方法理应适用于目录。 然而,方法可能失败,因为目录不是在它试图将其删除的点空......和OS通常不会让你删除一个非空目录。

解决办法是调用deleteOnExit()的用户下载过的文件。 你有后,要做到这一点directory.deleteOnExit()调用。 请参阅为什么的javadoc。

话虽如此,明确关闭挂钩是一种更可靠的方法。



Answer 3:

你应该做使用以下的Apache下议院IO :

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

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



Answer 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被调用。



Answer 5:

这为我工作。 递归函数。

public static void makeVolatile(File folder)
{
    folder.deleteOnExit();
    for(File f : folder.listFiles())
    {
        if(f.isDirectory())
            makeVolatile(f);
        else
            f.deleteOnExit();
    }
}


文章来源: Deleting a directory on exit in Java