以原子方式移动并重命名Path实例

时间:2014-03-20 10:11:57

标签: java file

鉴于Path path个实例,我有以下问题:

  1. 如何在不使用旧的path API的情况下重命名File点的文件,我还无法在任何地方找到它?

  2. 是否可以原子地将物理文件移动到新目录并同时重命名?

  3. 我正在使用Java 8,Path类的新内容已被添加进来,但不确定是否有任何帮助回答这个问题。

2 个答案:

答案 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并要求复制文件或关联目标位置   与此对象的不同提供者。

相关问题