我所说的“适当”的文件重命名是指:
它应该能在不同平台上工作。
它应该以某种方式处理以下情况:
- 文件被锁定
- 已存在一个带有“新”名称的文件
- 磁盘上没有足够的可用空间来完成操作。
有没有常见的解决方案/库/策略?
我所说的“适当”的文件重命名是指:
它应该能在不同平台上工作。
它应该以某种方式处理以下情况:
有没有常见的解决方案/库/策略?
如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 中定义的标准方法。
Google Guava库包含Files.move(..)方法,它可以满足您的一些要求--实际上,它尝试使用File.renameTo()移动文件,如果失败,则尝试使用复制和删除源策略。
我不知道有哪些库检查免费空间,因为在移动/复制过程中,可用空间可能会发生变化,唯一一致地处理低空间的方法是使复制/移动方法返回特殊的错误代码/异常,指向失败的原因--而当前的Java文件API没有这个功能...