菜单

Java 文件复制(简单快捷)

目录

Java 文件复制(简单快捷)文件通道 #ransferTo

 Java.复制文件下面的示例程序就是这样做的。
示例程序基于 J2SE1.4 中引入的新 I/O。 java.nio.channels.FileChannel#ransferTo 方法
这是最简单的编码方式,因为它允许你为复制过程编写程序,而无需考虑读取数据所需的缓冲区。

什么是通道?

通道这个词有多种不同的使用方式。
基本上,它似乎表示其他设备之间输入和输出数据的传输路径。java.nio.channels.FileChannel. 将是一个表示读写文件连接的类。

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

以下内容摘自 JavaAPI 文档。

transferTo( long position, long count, WritableByteChannel target)
将字节从该通道上的文件传输到指定的可写字节通道。
这种方法可能比从该通道读取数据并写入目标通道的简单循环更有效。许多操作系统可以直接从文件系统缓存向目标通道传输字节。 此时不会复制字节。

这个验证结果展示了如何使用普通流,
复制过程比其他 FileChannel 方法(例如使用 ByteBuffer#allocateDirect 方法)更快。


示例程序

执行

 直接在 C 盘下准备了一个 100 MB 的文件 "100M.txt",用于复制样本程序的文件。
在示例程序中 C:\100M.txt 复制并粘贴 C:\a.txt 文件

样品在以下环境中运行。
操作系统:WindowsXP
中央处理器: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(); }
    }
}

执行结果


 文件通道 #ransferTo 在复印处理中使用该方法
复制一个 100MB 的文件大约需要 3 秒。此外,复制过程中的堆使用量约为 300 (KB)。

顺便提一句Java 文件复制(更改缓冲区大小)在介绍的方法中
当我们指定最有效的缓冲区大小 1000KB 时,处理时间约为 4 秒,堆使用量约为 1,300KB。

即使通过流复制文件也可以通过调整缓冲区大小来加速,所以
可以说,复制单个文件的过程并没有太大的区别。
不过,当连续复制大文件或并行执行多个复制操作时,FileChannel 可以有效提高处理速度和堆使用率。

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