删除finally块中的目录?

时间:2017-10-17 11:19:59

标签: java file

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

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

事情是我从未见过这样的事情。释放finally块中的锁是很常见的。但是删除文件怎么样?有一些缺点吗?

3 个答案:

答案 0 :(得分:1)

假设p是一个文件,而不是一个目录,您可以用

替换p.toFile().delete()
Files.delete(p);

Files.deleteIfExists(p);

如果是目录,则需要(递归地)删除其中的文件和文件夹。

答案 1 :(得分:1)

  

但是删除文件呢?有一些缺点吗?

有一些顾虑:

  1. 您无法删除包含任何文件的目录。必须首先删除目录中的文件(或目录)。

  2. 在某些平台(例如Windows)上,您无法删除当前打开的文件。

答案 2 :(得分:1)

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