鉴于Path path
个实例,我有以下问题:
如何在不使用旧的path
API的情况下重命名File
点的文件,我还无法在任何地方找到它?
是否可以原子地将物理文件移动到新目录并同时重命名?
我正在使用Java 8,Path
类的新内容已被添加进来,但不确定是否有任何帮助回答这个问题。
答案 0 :(得分:7)
关于您的第一个问题,从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
此方法失败,则它是特定于实现的。答案 1 :(得分:1)
移动和重命名文件的操作基本相同,因此您要使用Files.move(Path source, Path target, CopyOption... options)
:
将文件移动或重命名为目标文件。
在强制以原子方式移动它时,使用StandardCopyOption.ATOMIC_MOVE
复制选项会导致以下情况:
此移动是作为原子文件系统操作执行的,所有其他选项都是 忽略。如果目标文件存在,那么如果是现有文件,则它是特定于实现的 被替换或者此方法因抛出
IOException
而失败。如果移动不了 作为原子文件系统操作执行,然后AtomicMoveNotSupportedException
抛出。例如,当目标位置不同时,这可能出现FileStore
并要求复制文件或关联目标位置 与此对象的不同提供者。