style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

[Problema]Mejor forma de copiar archivos

Buen día, estoy realizando un programa para copiar grandes cantidades de archivos, alrededor de 80TB de un disco a otro y me he encontrado que me JAVA hay varios métodos para copiar archivos de un disco a otro, quería saber si me podían ayudar a saber cuál es el más eficiente en cuanto a tiempo.

Además, querías preguntarles maneras de optimizar el tiempo, estaba pensando que podría poner varios threads a copiar archivos, pero ¿Cómo defino cuantos es lo más eficiente?

Estos temas de eficiencia me traen liado, les agradecería mucho la ayuda!

Algunos de los métodos que encontré para copiar archivos son:

1-
Que creo que es la más normal:
FileInputStream in = new FileInputStream(inFile);
FileOutputStream out = new FileOutputStream(outFile);

int c;
while( (c = in.read() ) != -1)
out.write(c);

in.close();
out.close();

2-
FileChannel in = (new FileInputStream(s)).getChannel();
FileChannel out = (new FileOutputStream(t)).getChannel();
in.transferTo(0, s.length(), out);
in.close();
out.close();

3-
Podría ser llamando a ""Runtime.exec" y copiandolo mediante la consola de windows (el programa se ejecutará el windows)

4-
public static void copyFile_Java7(String origen, String destino) throws IOException {
Path FROM = Paths.get(origen);
Path TO = Paths.get(destino);
//sobreescribir el fichero de destino, si existe, y copiar
// los atributos, incluyendo los permisos rwx
CopyOption[] options = new CopyOption[]{
StandardCopyOption.REPLACE_EXISTING,
StandardCopyOption.COPY_ATTRIBUTES
};
Files.copy(FROM, TO, options);
}

Gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de SuperSerch

eficiente

En cuanto a tiempo, dejar que el SO haga su chamba siempre será más eficiente, y salvo que tengas la certeza de que cada archivo a leer y cada a escribir están en discos con una controladora propia, no hará diferencia usar heads, pues tu cuello de botella es la controladora de cada disco en donde lees/escribes

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">