-2

我需要重命名:

newfolder -> oldfolder;

我需要确保万一出现异常旧文件夹将被保存。

所以我想下一步要做:

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

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

4

2 回答 2

1

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

逻辑是

  1. 文件夹到文件夹.bak
  2. folder.new 到文件夹
  3. 如果成功,删除 folder.bak
  4. elsewise folder.bak 到文件夹并引发错误
于 2012-06-22T15:41:16.143 回答
1

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

于 2012-06-23T17:22:08.310 回答