我正在创建一个临时目录来执行一些内务处理任务,并希望在完成所有这些任务后立即将其删除。问题是这些工作可以抛出异常,但我仍然不想手动删除所有这些临时文件。这是它的样子:
try{
Path p = //tmp dir
doJob1(p);
doJob2(p);
} finally{
p.toFile().delete();
}
事情是我从未见过这样的事情。释放finally
块中的锁是很常见的。但是删除文件怎么样?有一些缺点吗?
答案 0 :(得分:1)
假设p
是一个文件,而不是一个目录,您可以用
p.toFile().delete()
Files.delete(p);
或
Files.deleteIfExists(p);
如果是目录,则需要(递归地)删除其中的文件和文件夹。
答案 1 :(得分:1)
但是删除文件呢?有一些缺点吗?
有一些顾虑:
您无法删除包含任何文件的目录。必须首先删除目录中的文件(或目录)。
在某些平台(例如Windows)上,您无法删除当前打开的文件。
答案 2 :(得分:1)
当前实现的一个缺点是finally块中没有异常处理。 File上的delete方法可以抛出SecurityException(即,无论出于何种原因,您都无法访问该资源)。 另一个缺点可能是,如果您决定使用Callables / Runnables异步运行作业,则会出现问题。在这种情况下,finally块可能会在您的作业完成之前尝试执行,并且可能会失败。