在 Java 中复制文件的最快方法

2022-09-02 01:04:05

在Java中复制大量文件的最快方法是什么?到目前为止,我已经使用了文件流和nio。整体流似乎比nio快。到目前为止,您取得了哪些经历?


答案 1

http://www.baptiste-wicht.com/2010/08/file-copy-in-java-benchmark/ 可能会得到你的答案。

对于基准测试,我使用不同的文件进行了测试。

  1. 小文件 (5 KB)
  2. 中等文件 (50 KB)
  3. 大文件 (5 MB)
  4. 胖文件 (50 MB)
  5. 和一个巨大的文件(1.3 GB)只有二进制文件

我首先使用文本文件进行测试,然后使用二进制文件进行测试。我使用三种模式进行了测试:

  1. 在同一硬盘上。它是一个250 GB的IDE硬盘,具有8 MB的缓存。它采用 Ext4 格式。
  2. 在两个磁盘之间。我使用了第一个磁盘和另一个250 GB的SATA硬盘,缓存为16 MB。它采用 Ext4 格式。
  3. 在两个磁盘之间。我使用了第一个磁盘和另一个1 TB的SATA硬盘,缓存为32 MB。它是使用 NTFS 格式化的。

我使用了一个基准框架,在这里描述,对所有方法进行测试。测试已经在我的个人计算机上进行(Ubuntu 10.04 64位,Intel Core 2 Duo 3.16 GHz,6 Go DDR2,SATA硬盘)。使用的Java版本是Java 7 64位虚拟机...


答案 2

我会使用:

import java.io.*;
import java.nio.channels.*;

public class FileUtils{
    public static void copyFile(File in, File out) 
        throws IOException 
    {
        FileChannel inChannel = new
            FileInputStream(in).getChannel();
        FileChannel outChannel = new
            FileOutputStream(out).getChannel();
        try {
            inChannel.transferTo(0, inChannel.size(),
                    outChannel);
        } 
        catch (IOException e) {
            throw e;
        }
        finally {
            if (inChannel != null) inChannel.close();
            if (outChannel != null) outChannel.close();
        }
    }

    public static void main(String args[]) throws IOException{
        FileUtils.copyFile(new File(args[0]),new File(args[1]));
  }
}

如果Windows中的任何文件大于64M,则可能需要查看以下内容:http://forums.sun.com/thread.jspa?threadID=439695&messageID=2917510