在Java中重命名文件的正确方法是什么?

时间:2011-07-25 09:15:44

标签: java file cross-platform

我在'正确'文件重命名的意思是什么:

  1. 它应该适用于不同的平台。

  2. 它应该以某种方式处理以下情况:

    1. 文件被锁定
    2. 已存在“新”名称的文件
    3. 磁盘上没有足够的可用空间来完成操作。
  3. 是否有任何常见的解决方案/库/策略?

2 个答案:

答案 0 :(得分:2)

如javadoc所述:

  

重命名此抽象路径名表示的文件。很多方面   这种方法的行为本质上是依赖于平台的:   重命名操作可能无法从一个文件系统移动文件   对另一个,它可能不是原子的,如果一个文件可能不会成功   目标抽象路径名已存在。回报   应始终检查值以确保重命名操作   很成功。

以下是一个例子:

// The File (or directory) with the old name
File oldFile = new File("old.txt");

// The File (or directory) with the new name
File newFile = new File("new.txt");

// Rename file (or directory)
boolean success = oldFile.renameTo(newFile);
if (!success) {
    // File was not successfully renamed
}

我的建议是检查success布尔值并使用API​​中定义的标准方法。

答案 1 :(得分:1)

google guava lib包含Files.move(..)mothod,它确认了你的一些要求 - 实际上,它尝试使用File.renameTo()移动文件,如果失败,则尝试复制 - 和 - 删除源策略。

我不知道用于检查可用空间的库,因为在移动/复制期间可用空间可以更改,并且一致处理低空间的唯一方法是使用复制/移动方法返回指向您的特殊错误代码/异常失败的原因 - 当前java File API没有......