【问题标题】:Does renameTo in java preserves old folder in case of error? [closed]java中的renameTo是否会保留旧文件夹以防出错? [关闭]
【发布时间】:2012-06-24 22:35:48
【问题描述】:

我需要重命名:

newfolder -> oldfolder;

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

所以我想下一步:

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

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

【问题讨论】:

  • 如果重命名失败,FileUtils 是否会删除文件夹?
  • 在源代码中它要求系统这样做,所以我不确定......
  • 你试过什么?在您拥有的任何目标平台上进行测试似乎都是一件非常简单的事情。

标签: java apache file directory rename


【解决方案1】:

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

逻辑是

  1. 文件夹到文件夹.bak
  2. folder.new 到文件夹
  3. 如果成功,删除folder.bak
  4. elsewise folder.bak 到文件夹并引发错误

【讨论】:

  • 我认为不仅如此。也可能访问、操作系统错误、是否锁定(例如,里面的某些文件是打开的)等。
  • 但问题是 - oldfolder 会是什么 - 如果发生故障,我需要保存旧数据
  • 如果你想“撤回”你的答案,你应该删除它。如果你不能删除它flag它并要求版主为你删除它。我把它回滚了,所以其他人可以看到你实际上说了什么。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2014-06-23
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多