Java - эффективное копирование файлов - PullRequest
1 голос
/ 10 ноября 2009

Я хотел бы знать, какой из файлов лучше всего скопировать.

Ответы [ 4 ]

4 голосов
/ 10 ноября 2009

Если вы копируете файлы локально, вы должны использовать FileChannel.transferFrom () или FileChannel.transferTo (). Например:

FileInputStream is = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(oFile);
FileChannel f = is.getChannel();
FileChannel f2 = fos.getChannel();

f.transferTo(0, f.size(), f2);

f2.close();
f.close();

На многих платформах копирование будет осуществляться через DMA и будет происходить максимально быстро.

Если вы копируете файлы по сети, вы попадаете в другую ситуацию. В случае, если некоторые из файлов могут уже существовать, вам следует рассмотреть rsync, поскольку он может избежать передачи частей файлов, которые одинаковы с обеих сторон. Если наиболее распространенным случаем является то, что файлы еще не существуют на целевом компьютере, тогда вы захотите использовать что-то вроде scp. Для этого см. этот вопрос.

2 голосов
/ 10 ноября 2009

Проверьте класс Files из библиотеки guava от Google. Он содержит несколько утилит для копирования целых файлов.

2 голосов
/ 10 ноября 2009
2 голосов
/ 10 ноября 2009

«Лучший» нуждается в уточнении.

Я бы делегировал rsync, который очень хорошо копирует большое количество файлов с большим количеством опций Я не знаю хорошей реализации Java rsync.

...