Copia de archivos Java (fácil y rápido)ArchivoCanal#transferirA
en Javacopiar archivoPresentamos un programa de muestra para hacer esto.
El programa de muestra se basa en New I/O introducido en J2SE1.4. java.nio.channels.FileChannel#transferTo método.
Puede escribir un programa de procesamiento de copias sin preocuparse por el búfer necesario para leer datos, lo que lo convierte en el método de codificación más simple.
¿Qué es un canal?
La palabra canal se utiliza de muchas maneras diferentes.
Básicamente, parece indicar una ruta de transmisión para ingresar y enviar datos entre otros dispositivos.java.nio.channels.FileChannel es una clase que representa una conexión para leer y escribir en archivos.
transferir a Un método puede transferir bytes desde un archivo de origen a un canal de destino.
Lo siguiente se cita del documento JavaAPI.
transferTo(posición larga, cuenta larga, destino WritableByteChannel)
Transfiere bytes del archivo de este canal al canal de bytes grabable especificado.
Este método puede ser mucho más eficiente que un simple bucle que lee datos de este canal y los escribe en el canal de destino. Muchos sistemas operativos pueden transferir bytes directamente desde la memoria caché del sistema de archivos al canal de destino. En este momento, no se copia ningún byte.
El resultado de esta verificación muestra cómo utilizar una transmisión normal,
El proceso de copia fue más rápido que otros métodos FileChannel (como el uso del método ByteBuffer#allocateDirect).
programa de muestra
FileChannel srcChannel = nuevo
FileInputStream(srcPath).getChannel();
FileChannel destChannel = nuevo
FileOutputStream(destPath).getChannel();
intentar {
srcChannel.transferTo(0, srcChannel.size(), destChannel);
} finalmente {
srcChannel.close();
canaldestino.close();
}
}
ejecución
Para copiar el archivo del programa de muestra, hemos preparado un archivo de 100 MB "100M.txt" directamente en la unidad C.
En el programa de muestra C:\100M.txt copiando C:\a.txt Crea un archivo.
El ejemplo se ejecutó en el siguiente entorno.
SO: Windows XP
CPU: Athlon 1,46GHz
Memoria: 1GB
JRE: 1.6.4
◆Ejemplo de ejecución
/** * Ejemplo de ejecución * @param args */ public static void main(String[] args) { try { copyTransfer("C:\\100M.txt", "C:\\a.txt"); } catch (IOException e) { e.printStackTrace(); } }
ArchivoCanal#transferirA En el procesamiento de copias utilizando el método.
La copia de un archivo de 100 MB se completó en aproximadamente 3 segundos. Además, el uso del montón durante el proceso de copia fue de aproximadamente 300 (KB).
Por cierto,Copia de archivos Java (cambiar el tamaño del búfer)En el método introducido en
Cuando especificamos el tamaño de búfer más eficiente de 1000 KB, el tiempo de procesamiento fue de aproximadamente 4 segundos y el uso del montón fue de aproximadamente 1300 KB.
Incluso la copia de archivos por secuencia se puede acelerar ajustando el tamaño del búfer, por lo que
Se puede decir que no hay mucha diferencia en el proceso de copiar un solo archivo.
Sin embargo, al copiar archivos grandes de forma continua o ejecutar múltiples procesos de copia en paralelo, FileChannel puede resultar eficaz en términos de velocidad de procesamiento y uso del montón.