Если вы копируете файлы локально, вы должны использовать 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. Для этого см. этот вопрос.