该教程适用于JDK 8。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用已不再可用的技术。
请参阅 Java语言更改,了解Java SE 9及其后续版本中更新的语言特性的摘要。
请参阅 JDK发行说明,了解所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息。
可以使用copy(Path, Path, CopyOption...)
方法来复制文件或目录。如果目标文件已存在,则复制失败,除非指定了REPLACE_EXISTING
选项。
可以复制目录。但是,目录中的文件不会被复制,因此新目录是空的,即使原始目录包含文件。
当复制符号链接时,复制的是链接的目标。如果想复制链接本身,而不是链接的内容,请指定NOFOLLOW_LINKS
或REPLACE_EXISTING
选项。
此方法接受一个可变参数。支持以下StandardCopyOption
和LinkOption
枚举:
REPLACE_EXISTING
- 即使目标文件已经存在,也执行复制操作。如果目标是一个符号链接,复制的是链接本身(而不是链接的目标)。如果目标是一个非空目录,则复制失败,并抛出DirectoryNotEmptyException
异常。COPY_ATTRIBUTES
- 将与文件关联的文件属性复制到目标文件。支持的确切文件属性因文件系统和平台而异,但是last-modified-time
在各个平台上都受支持,并被复制到目标文件。NOFOLLOW_LINKS
- 表示不应该跟踪符号链接。如果要复制的文件是一个符号链接,则复制的是链接本身(而不是链接的目标)。如果你对enums
不熟悉,请参阅枚举类型。
以下示例展示了如何使用copy
方法:
import static java.nio.file.StandardCopyOption.*; ... Files.copy(source, target, REPLACE_EXISTING);
除了文件复制之外,Files
类还定义了可用于在文件和流之间进行复制的方法。可以使用copy(InputStream, Path, CopyOptions...)
方法将输入流的所有字节复制到文件中。可以使用copy(Path, OutputStream)
方法将文件的所有字节复制到输出流中。