# 移动文件或目录

> 原文： [https://docs.oracle.com/javase/tutorial/essential/io/move.html](https://docs.oracle.com/javase/tutorial/essential/io/move.html)

您可以使用 [`move(Path, Path, CopyOption...)`](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#move-java.nio.file.Path-java.nio.file.Path-java.nio.file.CopyOption...-) 方法移动文件或目录。如果目标文件存在，则移动失败，除非指定了`REPLACE_EXISTING`选项。

可以移动空目录。如果目录不为空，则在不移动该目录内容的情况下移动目录时允许移动。在 UNIX 系统上，移动同一分区中的目录通常包括重命名目录。在这种情况下，即使目录包含文件，此方法也可以工作。

此方法采用 varargs 参数 - 支持以下`StandardCopyOption`枚举：

*   `REPLACE_EXISTING` - 即使目标文件已存在，也执行移动。如果目标是符号链接，则替换符号链接，但它指向的内容不受影响。
*   `ATOMIC_MOVE` - 将移动作为原子文件操作执行。如果文件系统不支持原子移动，则抛出异常。使用`ATOMIC_MOVE`，您可以将文件移动到目录中，并保证观察目录的任何进程都可以访问完整的文件。

以下显示了如何使用`move`方法：

```
import static java.nio.file.StandardCopyOption.*;
...
Files.move(source, target, REPLACE_EXISTING);

```

虽然您可以在单个目录上实现`move`方法，如图所示，但该方法通常与文件树递归机制一起使用。有关更多信息，请参阅[走文件树](walk.html)。