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); }
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.