在Java中删除退出目录

Arr*_*rin 12 java directory

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

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

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

到目前为止我已经尝试过了

File directory = new File("macros/bin/");
directory.deleteOnExit();
Run Code Online (Sandbox Code Playgroud)

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

小智 20

你可以试试这个:

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

      @Override
      public void run() {
        /* Delete your file here. */
      }
 });
Run Code Online (Sandbox Code Playgroud)

很大程度上取决于你的程序如何结束.


Jac*_*kel 9

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

Runtime.getRuntime().addShutdownHook(new Thread(() -> FileUtils.deleteQuietly(fileOrDir)));
Run Code Online (Sandbox Code Playgroud)

注意:FileUtils.forceDeleteOnExit实现存在缺陷:它在注册目录期间注册要删除的文件,因此如果稍后添加文件将无法删除该目录.


Ste*_*n C 8

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

解决方案是调用deleteOnExit()用户下载的文件.你必须在通话这样做directory.deleteOnExit().请参阅javadoc了解原因.

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