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 de javaadicto
1
1
javaadicto, Bla bla bla soy excelente bla bla bla tengo varios titulos y se...
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]); } }