java - 仅当所有文件都可删除时才删除文件 - 放过无辜者

标签 java algorithm java-io delete-file

假设我的目录结构如下:

MyDirectory
> File1
> File2
> File3
> UndeletableFile
> File4

还假设我已经实现了一个递归算法来删除文件夹的内容,然后删除文件夹本身和/或使用了一个很好的建议 here

现在,在网络和 SO 上进行了一些搜索后,我似乎无法找到解决方案:
我想删除整个文件夹,但我只想删除如果它对其中的每个文件 和子文件夹都成功。当前的实现(准确地说是 java.io.File.delete())将在调用文件后立即删除文件,然后继续处理下一个文件。如果像上例那样删除文件夹中途失败,系统中将留下 UndeletableFileFile5 以及 MyDirectory

是否有针对这种情况的便利方法或最佳实践算法?
如果操作中途失败,目标是让可删除文件存活。毕竟,如果他们的家能幸存下来,他们就不应该死,对吧?

到目前为止我的想法是:
也许先重命名所有文件而不是删除它们会更聪明,就像这样

MyDirectory
> File1temp
> File2temp
> ...

之后,如果该过程失败,我可以再次遍历目录并将所有文件重命名为正常,如果成功,我可以永久删除它们。

但是这个接缝对我来说效率很低,有没有更好的解决方案? 在我看来这应该是一个普遍的问题,如果我忽略了什么请提供链接

最佳答案

没有完全安全的方法来做到这一点。

最好的办法是扫描所有文件,检查是否允许删除它们。只有扫描成功,您才会进行实际删除。

要注意的是,如果某些内容在您扫描之后但在您删除它之前被锁定,那么删除该文件仍然会失败。

唯一的选择是保留所有文件的副本(即将它们移动到回收站,将它们存储在 zip 中等),直到所有删除都成功,然后才清空回收站/删除 zip -如果不恢复。

但即便如此,也可能会发生一些事情来阻止恢复。

这里确实会有边缘情况,您需要做的是确定它们是什么,并决定在每种情况下所需的行为是什么。

关于java - 仅当所有文件都可删除时才删除文件 - 放过无辜者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21328328/

相关文章:

java - 启动tomcat时出现UnsatisfiedLinkError

java - 从 java 杀死一个 Oozie 工作流

java - MediaPlayer 无内容提供程序错误 : W/MediaPlayer: Couldn't open https://youtu. be/oEgpGv2CF1U : java. io.FileNotFoundException:无内容提供程序:

Java二进制文件writeUTF...解释规范

java - 从 SCM checkout Maven 项目 : disconnect and merge

java - 使用 `UnpooledByteBufAllocator` 时 buf 泄漏正常吗

algorithm - 在 2D 中查找最近的对象 - 它可以在 O(n) 以下进行优化吗?

python - 使用 itertools.groupby 性能进行 NumPy 分组

JavaScript:为什么推送对循环中的这些对象不起作用?

java - 首次运行时 HttpURLConnection 由对等方重置...可立即重新运行