在 java 中重命名是否保留旧文件夹以防出错



我需要重命名:

newfolder -> oldfolder;

我需要确保在异常情况下将保存旧文件夹。

所以我想接下来要做:

 1. rename oldfolder -> tempfolder.
 2. rename newfolder -> oldfolder.
 3. If previous ok - delete oldfolder.

但我有半信半疑 - 可能是Apache FileUtils做同样的事情。或者重命名操作是安全的。什么是正确的?谢谢。

如果尝试将文件夹重命名为现有名称,它将失败。因此,如果您想替换文件夹,则应使用已经提到的替代方法。

逻辑将是

    文件夹
  1. 到文件夹.bak
  2. 文件夹
  3. .新建到文件夹
  4. 如果成功,请删除文件夹.bak
  5. 其他文件夹.bak到文件夹并引发错误

答案取决于您正在使用的文件系统。 查看源代码,File.io.renameto() 依赖于平台,委托给本机 O/S 调用。据我所知,所有 O/S 重命名都被认为是安全的。 在为新目标更新新的 INODE/指针后,它会执行"删除"(通常只是删除 INODE 指针)。 虽然您不能假设 renameTo() 会成功(始终检查返回代码),但您可以可靠地假设如果它失败,那么原始目录应该完好无损。

最新更新