给定一个Path path
实例,我有以下问题:
-
我如何重命名
path
点的文件,如果可能的话,不诉诸旧的File
API,我还没能在任何地方找到它? -
是否有可能自动地将物理文件移动到新目录并同时重命名它?
我正在使用Java 8, Path
类的新东西肯定添加了,不确定是否有任何帮助回答这个问题。
关于您的第一个问题,自Java 7以来,您可以使用Files#move
:
Files.move(path, targetPath);
如果您需要它是原子的,您可以使用ATOMIC_MOVE
选项:
import static java.nio.file.StandardCopyOption.ATOMIC_MOVE;
Files.move(path, targetPath, ATOMIC_MOVE);
注意:
- 如果不支持
AtomicMoveNotSupportedException
选项,这可能会失败(例如,如果您将文件从本地硬盘移动到网络位置)。 - 如果使用
REPLACE_EXISTING
选项,则忽略,如果目标文件存在,则如果替换现有文件或抛出IOException
此方法失败,则它是特定于实现的。
移动和重命名文件本质上是相同的操作,因此您希望使用Files.move(Path source, Path target, CopyOption... options)
:
将文件移动或重命名为目标文件。
在强制自动移动它方面,使用StandardCopyOption.ATOMIC_MOVE
复制选项会导致以下情况:
移动作为原子文件系统操作执行,所有其他选项都是忽略了。如果目标文件存在,那么它是特定于实现的被替换,或者抛出
IOException
导致此方法失败。如果不能搬家作为原子文件系统操作执行,那么AtomicMoveNotSupportedException
就是抛出。例如,当目标位置位于不同的位置时,可能会出现这种情况FileStore
和需要复制文件,或者关联目标位置