Copiar archivos

Como hago para copiar archivos de un directorio a otro y a la vez medir el tiempo de copiado en java(código fuente)

1 respuesta

Respuesta
1
Este código es para copiar archivos esta hecho en jsp y creo que como ejemplo para orientarte te servirá, respecto a la medición de tiempo creo que no tengo nada que se parezca
el código es:
package javahispano.util;
import java.io.*;
import java.nio.channels.*;
/**
*
*<h1>Copiando archivos utilizando <i>java.nio</i></h1>
*<i>Sagran, 9 de Enero de 2003</i>
*<hr>
*
*
*<h2>Conceptos previos</h2>
*
*La clave del paquete java.nio es el concepto de <i>ByteBuffer</i>, el cual, como su propio
*nombre indica es un contenedor de datos de tipo <i>byte</i>.
*Existen métodos para manipular directamente un <i>ByteBuffer</i>, pero además existen
*ciertas entidades que pueden leer y escribir en ellos. Dichas entidades implementan la interfaz
*<i>ByteChannel</i>. Una implementación de <i>ByteChannel</i> representa una conexión
*de entrada/salida capaz de leer y escribir secuencias de bytes en un <i>ByteBuffer</i>.
*<p>
*Existen varias clases que implementan <i>ByteChannel</i>. La que nos interesa en este caso es
*<i>FileChannel</i>. Inexplicablemente en J2SE-1.4.1 no disponemos de constructores o factorías
*que nos permitan construir un <i>FileChannel</i> a partir de un <i>File</i> (en la documentación
*se comenta que dipondremos de ellos en el futuro). Para obtener un <i>FileChannel</i> necesitamos la existencia
*previa de un ejemplar de alguna de las siguientes clases de <i>java.io</i>: <i>FileInputStream</i>, <i>FileOutputStream</i> o <i>RandomAccessFile</i>. Las tres clases
*tienen el método <i>getChannel()</i> que nos proporciona un <i>FileChannel</i> que representa una conexión
*con el archivo al que está vinculado el ejemplar de la clase de <i>java.io</i>.
*<p>
*La clase <i>FileChannel</i>, además de facilitar la lectura/escritura en ByteBuffer presenta
*varias características muy interesantes. Aquí sólo comentaremos la posibilidad de realizar
*tranferencias directas de bytes de un <i>FileChannel</i> a otro utilizando al máximo las posibilidades
*del sistema operativo. Para ello disponemos del método:
*<a href="http://java.sun.com/j2se/1.4.1/docs/api/java/nio/channels/FileChannel.html#transferTo(long, long, java.nio.channels.WritableByteChannel)">
*<i>transferTo(...)</i></a> (Echale un vistazo al último parrafo de la 'doc' del método).
*<h2>El código</h2>
*<pre>
*FileInputStream fis = new FileInputStream(nombreFuente);
*FileOutputStream fos = new FileOutputStream(nombreDestino);
*FileChannel canalFuente = fis.getChannel();
*FileChannel canalDestino = fos.getChannel();
*canalFuente.transferTo(0, canalFuente.size(), canalDestino);
*fis.close();
*fos.close();
*</pre>
*Hay que observar que el método <i>close()</i> de <i>FileInputStream</i> y
*<i>FileOutputStream</i> se encarga de cerrar el <i>FileChannel</i> asociado.
*
*<h2>Un ejemplo para copiar y compilar</h2>
*
*Para facilitar la comprensión del código no voy a controlar de manera rigurosa ni
*errores ni excepciones, y simplemente "tiraré la basura por la ventana".
* @author javaadicto
* @version 1.0
*
* */
public class CopiadorDeArchivos {
public static void copia(String nombreFuente, String nombreDestino) throws IOException {
FileInputStream fis = new FileInputStream(nombreFuente);
FileOutputStream fos = new FileOutputStream(nombreDestino);
FileChannel canalFuente = fis.getChannel();
FileChannel canalDestino = fos.getChannel();
canalFuente.transferTo(0, canalFuente.size(), canalDestino);
fis.close();
fos.close();
}
/**
* Al main se le pasan dos argumentos, el nombre del archivo que deseamos coipiar
* y el destino donde deseamos que se copi dicho archivo.
* @param args
* @throws Exception
*/
public static void main(String [] args) throws Exception {
CopiadorDeArchivos.copia(args[0], args[1]);
}
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas