viernes, 24 de julio de 2009

Copia de Archivos en Java

http://ubuntuarte.com/wordpress/wp-content/uploads/2008/06/java-orangebox.png




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




2 Comentarios:

Anónimo dijo...

el codigo esta muy bueno................
no hay donde perderse...

gracias

Felipe dijo...

Gracias a tí por comentar.

Saludos.

Publicar un comentario

Felinfo: Java, Linux, Virtualización. Open Source.  ©Template Blogger Green by Dicas Blogger .

TOPO