Что такое быстрый способ скопировать большое количество файлов на Java. До сих пор я использовал файловые потоки и nio. Потоки, по-видимому, быстрее, чем nio. Какой опыт вы сделали до сих пор?
Самый быстрый способ скопировать файлы в Java
Ответ 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()
.