Подтвердить что ты не робот

Самый быстрый способ скопировать файлы в Java

Что такое быстрый способ скопировать большое количество файлов на Java. До сих пор я использовал файловые потоки и nio. Потоки, по-видимому, быстрее, чем nio. Какой опыт вы сделали до сих пор?

4b9b3361

Ответ 1

http://www.baptiste-wicht.com/2010/08/file-copy-in-java-benchmark/ может дать вам ваш ответ.

Для теста я сделал тесты с использованием разных файлов.

  • Маленький файл (5 КБ)
  • Средний файл (50 КБ)
  • Большой файл (5 МБ)
  • Жирный файл (50 МБ)
  • И огромный файл (1,3 ГБ) только двоичный

И сначала я сделал тесты, используя текстовые файлы, а затем используя двоичные файлы. Я использовал тесты в трех режимах:

  • На том же жестком диске. Это жесткий диск IDE объемом 250 ГБ с 8 МБ кеша. Он отформатирован в Ext4.
  • Между двумя дисками. Я использовал первый диск и другой жесткий диск SATA емкостью 250 ГБ с кешем 16 МБ. Он отформатирован в Ext4.
  • Между двумя дисками. Я использовал первый диск и другой жесткий диск SATA объемом 1 ТБ с 32 МБ кеша. Он отформатирован с использованием NTFS.

Я использовал базовую платформу описанную здесь, чтобы провести тесты всех методов. Тесты были выполнены на моем персональном компьютере (Ubuntu 10.04 64 бит, Intel Core 2 Duo 3,16 ГГц, 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]));
  }
}

Если какой-либо из ваших файлов больше, чем 64M в Windows, вам может потребоваться посмотреть: http://forums.sun.com/thread.jspa?threadID=439695&messageID=2917510

Ответ 3

У вас есть java fork из пакета ОС script, который копирует файлы. Возможно, ваш код должен написать пакет script.

Ответ 4

Вы можете использовать либо реализацию FileUtils библиотеки apache commons-io для копирования файла

FileUtils.copyFile(new File(sourcePath), new File(destPath));

Использует FileChannel для операции ввода-вывода.

Или используйте java.nio.file.Files copy().