Copia de Archivos en Java
La librería java.nio
Esta librería apareció con java 1.4 y básicamente lo que hace es definir buffers, los cuales contienen datos. En este post se verá cómo haciendo uso de su clase FileChannel, podemos conseguir una copia de archivos de alto rendimiento.
El código
public static void copyFile(File sourceFile, File destFile) throws IOException {
if(!destFile.exists()) {
destFile.createNewFile();
}
FileChannel source = null;
FileChannel destination = null;
try {
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
destination.transferFrom(source, 0, source.size());
}
finally {
if(source != null) {
source.close();
}
if(destination != null) {
destination.close();
}
}
}
Y desde nuestro main podemos llamar a este método así:
public static void main(String[] args) throws IOException {
File archivoEntrada = new File("C:/archivoEntrada.txt");
File archivoSalida = new File("C:/archivoSalida.txt");
copyFile(archivoEntrada, archivoSalida);
}
Explicación
La línea que realiza la transperencia es " destination.transferFrom(source, 0, source.size()); ". El algoritmo utilizado está muy optimizado y su rendimiento será mucho mayor que si la operación la hiciéramos usando bloques de memoria de tamaño arbitrario. Además puede ser opimizado según la plataforma, el contexto y tipo de canal, ó puede usar un método nativo en las llamadas.
Se pueden hacer pruebas usando archivos de entre 50 y 100 megas por ejemplo, y se verá que el tiempo utilizado es muy similar al usado por el sistema operativo.
Fuentes
NIO: High Performance File Copying de http://www.javalobby.org
Tweet
2 Comentarios:
el codigo esta muy bueno................
no hay donde perderse...
gracias
Gracias a tí por comentar.
Saludos.
Publicar un comentario