菜单

Java 文件复制(简单快捷)

目录

Java 文件复制(简单快捷)文件通道#传输到

在 Java 中复制文件以下是一个演示此功能的示例程序。
该示例程序使用了 J2SE 1.4 中引入的 New I/O。 java.nio.channels.FileChannel#transferTo 我们将采用这种方法。
这样一来,您就可以编写复制程序而无需担心读取数据所需的缓冲区,从而实现最简单的编码。

什么是通道?

“渠道”一词有多种用法,
基本上,它似乎是指不同设备之间数据输入和输出的传输路径。java.nio.channels.FileChannel 此类表示用于读取和写入文件的连接。

转移至 该方法可以将字节数据从源文件传输到目标通道。

以下摘自 Java API 文档。

transferTo(long position, long count, WritableByteChannel target)
此命令将此通道上的文件中的字节传输到指定的可写字节通道。
这种方法可能比简单的循环(从当前通道读取数据并将其写入目标通道)效率更高。许多操作系统可以直接将字节从文件系统缓存传输到目标通道,而无需复制字节。

验证结果表明,使用常规流是其中一种方法。
与其他使用 FileChannel 的方法(例如使用 ByteBuffer#allocateDirect 方法)相比,这种方法可以实现更快的复制速度。


示例程序

执行

为了复制示例程序文件,我在 C 盘下直接创建了一个名为“100M.txt”的 100MB 文件。
在示例程序中…… C:\100M.txt 复制 C:\a.txt 创建以下文件。

样本在以下环境下运行。
操作系统:Windows XP
CPU:Athlon 1.46GHz
内存:1GB
JRE:1.6.4

◆示例

/** * 执行示例 * @param args */ public static void main(String[] args) { try { copyTransfer("C:\\100M.txt", "C:\\a.txt"); } catch (IOException e) { e.printStackTrace(); } }

◆执行结果


 文件通道#传输到 在使用方法的复制操作中
复制一个 100MB 文件的过程大约耗时 3 秒。复制过程中堆内存使用量也约为 300 KB。

顺便一提,Java 文件复制(更改缓冲区大小)那里描述的方法,
当指定最有效的缓冲区大小为 1000KB 时,处理时间约为 4 秒,堆使用量约为 1300KB。

即使采用基于流的文件复制方式,也可以通过调整缓冲区大小来加快复制速度。
对于复制单个文件的过程,这两种方法之间并没有太大区别。
但是,当顺序复制大文件或并行运行多个复制操作时,FileChannel 在处理速度和堆使用方面可能非常有效。

  • URLをコピーしました!
目录