Java 删除最后一个块中的目录?

Java 删除最后一个块中的目录?,java,file,Java,File,我正在创建一个临时目录来执行一些内务管理任务,并希望在所有这些任务完成后尽快将其删除。问题是这些作业可以抛出异常,但我仍然不想手动删除所有这些临时文件。下面是它的样子: try{ Path p = //tmp dir doJob1(p); doJob2(p); } finally{ p.toFile().delete(); } 问题是我从未见过这样的事情。在最后块中释放锁是常见的。但是删除文件呢?有一些缺点吗?假设p是一个文件,而不是一个目录,您可以用它替换p.toFi

我正在创建一个临时目录来执行一些内务管理任务,并希望在所有这些任务完成后尽快将其删除。问题是这些作业可以抛出异常,但我仍然不想手动删除所有这些临时文件。下面是它的样子:

try{
   Path p = //tmp dir
   doJob1(p);
   doJob2(p);
} finally{
   p.toFile().delete();
}

问题是我从未见过这样的事情。在
最后
块中释放锁是常见的。但是删除文件呢?有一些缺点吗?

假设
p
是一个文件,而不是一个目录,您可以用它替换
p.toFile().delete()

Files.delete(p);


如果它是一个目录,您将需要(递归地)删除其中的文件和文件夹。

假设
p
是一个文件,而不是一个目录,您可以将
p.toFile().delete()替换为

Files.delete(p);

如果它是一个目录,您需要(递归地)删除其中的文件和文件夹

但是删除文件呢?有什么缺点吗

有一些担忧:

  • 不能删除包含任何文件的目录。必须首先删除目录中的文件(或目录)

  • 在某些平台(如Windows)上,无法删除当前打开的文件

  • 但是删除文件呢?有什么缺点吗

    有一些担忧:

  • 不能删除包含任何文件的目录。必须首先删除目录中的文件(或目录)

  • 在某些平台(如Windows)上,无法删除当前打开的文件


  • 当前实现的一个缺点是finally块中没有异常处理。文件上的delete方法可能引发SecurityException(即,无论出于何种原因,您都无法访问资源)。
    另一个缺点是,如果您决定使用Callables/Runnables异步运行作业,那么这可能会有问题。在这种情况下,finally块可能会在作业完成之前尝试执行,并且可能会失败。

    当前实现的一个缺点是finally块中没有异常处理。文件上的delete方法可能引发SecurityException(即,无论出于何种原因,您都无法访问资源)。
    另一个缺点是,如果您决定使用Callables/Runnables异步运行作业,那么这可能会有问题。在这种情况下,finally块可能会在您的作业完成之前尝试执行,并且可能会失败。

    考虑使用-这可能会帮您完成作业。@davida“退出时删除”会创建一个要删除的文件列表,该列表位于运行时间较长的进程(例如Web服务器)上将是一个内存猪。考虑使用-这可能为你做的工作。@达维达在Exchange中删除“创建一个要删除的文件的列表,这是在一个较长的运行过程(例如,一个Web服务器)将是一个内存HOG。我知道这有点不对。谢谢,我就知道有点不对劲。非常感谢。