我需要重命名:
newfolder -> oldfolder;
我需要确保在异常情况下将保存旧文件夹。
所以我想接下来要做:
1. rename oldfolder -> tempfolder.
2. rename newfolder -> oldfolder.
3. If previous ok - delete oldfolder.
但我有半信半疑 - 可能是Apache FileUtils做同样的事情。或者重命名操作是安全的。什么是正确的?谢谢。
如果尝试将文件夹重命名为现有名称,它将失败。因此,如果您想替换文件夹,则应使用已经提到的替代方法。
逻辑将是
- 文件夹
- 到文件夹.bak 文件夹
- .新建到文件夹
- 如果成功,请删除文件夹.bak
- 其他文件夹.bak到文件夹并引发错误
答案取决于您正在使用的文件系统。 查看源代码,File.io.renameto() 依赖于平台,委托给本机 O/S 调用。据我所知,所有 O/S 重命名都被认为是安全的。 在为新目标更新新的 INODE/指针后,它会执行"删除"(通常只是删除 INODE 指针)。 虽然您不能假设 renameTo() 会成功(始终检查返回代码),但您可以可靠地假设如果它失败,那么原始目录应该完好无损。