在 Java 复制文件教程中,我们展示了如何使用 Java 复制文件。 我们复制具有内置类的文件,包括File
,FileInputStream
,FileOutputStream
,FileChannel
和Files
。 我们还使用两个第三方库:Apache Commons IO 和 Google Guava。
文件复制是创建一个与现有文件具有相同内容的新文件。 文件移动正在将文件从一个位置传输到另一位置。
要复制的文件称为源文件,而新副本称为目标文件。
bugs 文件
在示例中,我们使用bugs.txt
文件。
bugs.txt
这是一个包含错误名称的简单文件。
使用FileInputStream
和FileOutputStream
复制文件
使用FileInputStream
和FileOutputStream
,我们创建用于读取和写入File
的流。 找不到文件时,将引发FileNotFoundException
。 File
是 Java 中文件或目录的表示。
com/zetcode/CopyFileStream.java
本示例使用FileInputStream
,FileOutputStream
和File
复制文件。
我们创建FileInputStream
和FileOutputStream
的实例。 try-with-resources 语句将自动关闭流。
我们将复制 1024 个字节的文本块。 这样做是为了获得更好的性能。
FileInputStream's
read()
方法从输入流中读取指定数量的字节,并将其存储到缓冲区数组中。 它返回读入缓冲区的字节总数,如果由于到达流的末尾而没有更多数据,则返回-1。
FileOutputStream's
write()
方法将存储在缓冲区中的字节写入输出流。 第一个参数是数据,第二个参数是数据中的起始偏移量,最后一个参数是要写入的字节数。
使用Paths
和Files
复制文件
下一个示例与上一个示例相似。 它使用了更现代的 API。
com/zetcode/CopyFileStream2.java
我们使用Paths
和Files
类复制文件。
从文件中,我们创建Path
对象。
流是在Files
类的帮助下创建的。
使用FileChannel
的复制文件
FileChannel
是用于读取,写入,映射和操作文件的通道。 FileChannel
是经典 Java IO 流 API 的替代方法。 它位于java.nio
程序包中。
RandomAccessFile
支持读取和写入随机访问文件。 随机访问意味着我们可以在文件中的任何位置读取或写入信息。
com/zetcode/CopyFileChannel.java
该示例使用FileChannel
复制文本文件。
创建读取模式下的随机访问文件。
创建一个处于读/写模式的随机访问文件。
我们使用getChannel()
从文件中获取频道。
transferFrom()
方法将字节从源通道传输到目标通道。 第一个参数是源通道,第二个参数是文件中传输的开始位置,第三个参数是要传输的最大字节数。
用Files.copy
复制文件
Java 7 引入了Files.copy()
方法,该方法提供了一种复制文件的简便方法。 如果目标文件存在,则复制失败,除非指定了REPLACE_EXISTING
选项。 Files.copy()
采用可选的第三副本选项参数。
options 参数可以包括以下任何一项:
REPLACE_EXISTING
-如果目标文件存在,则目标文件不是非空目录时,将替换目标文件。COPY_ATTRIBUTES
-尝试将与此文件关联的文件属性复制到目标文件。ATOMIC_MOVE
-移动文件。NOFOLLOW_LINKS
-不遵循符号链接。
前三个选项在StandarCopyOption
中可用; LinkOption
中的最后一个。
com/zetcode/CopyFileJava7.java
本示例使用Files.copy()
复制文件。 如果目的地已经存在,它将替换目的地。
使用 Apache Commons IO 进行 Java 复制文件
Apache Commons IO 是一个实用程序库,可帮助开发 IO 功能。 它包含FileUtils.copyFile()
方法来执行复制。 FileUtils.copyFile()
将指定源文件的内容复制到指定目标文件中,并保留文件日期。 如果目标文件所在的目录不存在,则创建该目录。 如果目标文件存在,则此方法将覆盖它。
对于此示例,我们需要commons-io
工件。
com/zetcode/CopyFileApacheCommons.java
该示例使用 Apache Commons 的FileUtils.copyFile()
复制文件。
用 Guava Java 复制文件
Google Guava 是 Java 通用库的开源集。 它包括用于复制文件的Files.copy()
。
我们使用 Guava 依赖。
com/zetcode/CopyFileGuava.java
该示例使用 Guava 的Files.copy()
复制文件。
在本教程中,我们展示了几种用 Java 复制文件的方法。