假设我的目录结构如下:
MyDirectory
> File1
> File2
> File3
> UndeletableFile
> File4
还假设我已经实现了一个递归算法来删除文件夹的内容,然后删除文件夹本身和/或使用了一个很好的建议 here
现在,在网络和 SO 上进行了一些搜索后,我似乎无法找到解决方案:
我想删除整个文件夹,但我只想删除如果它对其中的每个文件 和子文件夹都成功。当前的实现(准确地说是 java.io.File.delete()
)将在调用文件后立即删除文件,然后继续处理下一个文件。如果像上例那样删除文件夹中途失败,系统中将留下 UndeletableFile
和 File5
以及 MyDirectory
。
是否有针对这种情况的便利方法或最佳实践算法?
如果操作会中途失败,目标是让可删除文件存活。毕竟,如果他们的家能幸存下来,他们就不应该死,对吧?
到目前为止我的想法是:
也许先重命名所有文件而不是删除它们会更聪明,就像这样
MyDirectory
> File1temp
> File2temp
> ...
之后,如果该过程失败,我可以再次遍历目录并将所有文件重命名为正常,如果成功,我可以永久删除它们。
但是这个接缝对我来说效率很低,有没有更好的解决方案? 在我看来这应该是一个普遍的问题,如果我忽略了什么请提供链接
最佳答案
没有完全安全的方法来做到这一点。
最好的办法是扫描所有文件,检查是否允许删除它们。只有扫描成功,您才会进行实际删除。
要注意的是,如果某些内容在您扫描之后但在您删除它之前被锁定,那么删除该文件仍然会失败。
唯一的选择是保留所有文件的副本(即将它们移动到回收站,将它们存储在 zip 中等),直到所有删除都成功,然后才清空回收站/删除 zip -如果不恢复。
但即便如此,也可能会发生一些事情来阻止恢复。
这里确实会有边缘情况,您需要做的是确定它们是什么,并决定在每种情况下所需的行为是什么。
关于java - 仅当所有文件都可删除时才删除文件 - 放过无辜者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21328328/