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

4

我所说的“适当”的文件重命名是指:

  1. 它应该能在不同平台上工作。

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

    1. 文件被锁定
    2. 已存在一个带有“新”名称的文件
    3. 磁盘上没有足够的可用空间来完成操作。

有没有常见的解决方案/库/策略?


1
请查看类似问题的回答:https://dev59.com/X0vSa4cB1Zd3GeqPcCrS#2835599 - Jugal Shah
2个回答

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

Google Guava库包含Files.move(..)方法,它可以满足您的一些要求--实际上,它尝试使用File.renameTo()移动文件,如果失败,则尝试使用复制和删除源策略。

我不知道有哪些库检查免费空间,因为在移动/复制过程中,可用空间可能会发生变化,唯一一致地处理低空间的方法是使复制/移动方法返回特殊的错误代码/异常,指向失败的原因--而当前的Java文件API没有这个功能...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接