在finally块中删除目录?
我正在创建一个临时目录来完成一些管家任务,并希望在完成所有这些任务后立即删除它。这些作业可能会引发异常,但我仍然不想手动删除所有这些临时文件。下面是它的样子:在finally块中删除目录?
try{
Path p = //tmp dir
doJob1(p);
doJob2(p);
} finally{
p.toFile().delete();
}
事情是我从来没有见过这样的事情。在finally
块中释放锁 - 很常见。但是,删除文件呢?有一些缺点吗?
当前实现的一个缺点是finally块中没有异常处理。 File上的delete方法可以抛出一个SecurityException(即无论出于何种原因都无法访问资源)。 另一个缺点可能是,如果您决定使用Callables/Runnables异步运行作业,则会出现问题。在那种情况下,finally块可能会在你的工作完成之前尝试执行,并且可能会失败。
优秀点! –
假设p
是一个文件,而不是你可能会
Files.delete(p);
或
Files.deleteIfExists(p);
更换p.toFile().delete()
如果你需要(递归)目录的目录中删除文件和文件夹。
但是,删除文件呢?有一些缺点吗?
有一些顾虑:
不能删除任何包含文件的目录。必须先删除目录中的文件(或目录)。
在某些平台(例如Windows)上,您无法删除当前打开的文件。
我知道那有什么不对。谢谢。 –
考虑使用https://docs.oracle.com/javase/8/docs/api/java/io/File.html#deleteOnExit-- - 可为您完成这项工作。 –
@davida'在退出时删除'会创建一个要删除的文件列表,在较长的运行过程(例如网络服务器)上将是一个内存管理器。 –