Copiar archivos con Java se puede usar en todas partes. Aquí hay una clase para su referencia. Hay dos métodos en total:
Public static boolean copyfile (String srcFilename, string DestFileName, boolean superpuesto); Public Static Boolean CopyDirctory (String srcDirname, string DestDirname, boolean superposición);
en:
SrcFilename Nombre del archivo para ser copiado
Nombre del archivo de destino de DescFileName
Superposición si el archivo de destino existe, si se sobrescribe. Si la copia es exitosa, devuelva verdadero, de lo contrario, devuelva falso
Código:
import java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.fileOutputStream; import java.io.ioException; import java.io.inputstream; import java.io.outputstream; import javax.swing.JOptionPane; / ** * Copiar archivo o carpeta * * zww */ public class CopyFileUtil {private static string Message = ""; / ** * Copiar un solo archivo * * @param srcfilename * El nombre del archivo para ser copiado * @param DescFileName * Nombre del archivo de destino * @Param Overlay * Si el archivo de destino existe, ya sea que Overwrite * @return si la copia es exitosa, return true, de lo contrario return False */ public static Copyfile (string srcFileName, String DestFileName, boolean, boolean, boolean, boolean srrcfile upRcfile upRCfile upray. = nuevo archivo (srcfilename); // Determinar si el archivo de origen existe si (! Srcfile.exists ()) {mensaje = "archivo de origen:" + srcfilename + "no existir!"; JOpttionPane.ShowMessEdialog (NULL, MENSAJE); devolver falso; } else if (! srcfile.isfile ()) {Message = "Copiar archivo fallido, archivo de origen:" + srcfilename + "¡no es un archivo!"; JOpttionPane.ShowMessEdialog (NULL, MENSAJE); devolver falso; } // determinar si el archivo de destino existe el archivo destfile = nuevo archivo (destfileName); if (destfile.exists ()) {// Si el archivo de destino existe y permite sobrescribir if (overlay) {// eliminar el archivo de destino existente, independientemente de si el archivo de destino es un directorio o un solo archivo nuevo archivo (destfileName) .delete (); }} else {// Si el directorio donde el archivo de destino no existe, cree el directorio if (! DestFile.getParentFile (). Exists ()) {// El directorio donde el archivo de destino no existe si (! DestFile.getParentFile (). MkDirs ()) {// no se puede copiar en el archivo: no se puede crear el directorio donde el archivo objetivo se retrocede falso; }}} // Copiar archivo int byteread = 0; // Número de bytes Leer InputStream in = null; OutputStream out = null; intente {in = new FileInputStream (srcfile); out = new FileOutputStream (DestFile); byte [] buffer = new Byte [1024]; while ((byteread = in.read (buffer))! = -1) {out.write (buffer, 0, byteread); } return verdadero; } catch (FileNotFoundException e) {return false; } catch (ioException e) {return false; } finalmente {try {if (out! = null) out.close (); if (in! = null) in.close (); } catch (ioException e) {E.PrintStackTrace (); }}} Ial DestDirname, Boolean Overlay) {// Determinar si el directorio de origen existe archivo srcdir = nuevo archivo (srcdirname); if (! srcdir.exists ()) {Message = "Copiar directorio fallido: directorio de origen" + srcdirname + "no existes!"; JOpttionPane.ShowMessEdialog (NULL, MENSAJE); devolver falso; } else if (! srcdir.isDirectory ()) {Message = "Copy Directory falló:" + srcdirname + "¡No es un directorio!"; JOpttionPane.ShowMessEdialog (NULL, MENSAJE); devolver falso; } // Si el nombre del directorio de destino no termina con un delimitador de archivo, agregue el delimitador de archivo if (! DestDirname.endswith (file.separator)) {DestDirName = DestDirName + File.separator; } Archivo DestDir = nuevo archivo (DestDirName); // Si la carpeta de destino existe si (DestDir.exists ()) {// Si se permite la superposición, elimine el directorio de destino existente if (superpuesto) {nuevo archivo (DestDirName) .Delete (); } else {Mensaje = "Directorio de copia fallido: Directorio de destino" + DestDirname + "¡Ya existió!"; JOpttionPane.ShowMessEdialog (NULL, MENSAJE); devolver falso; }} else {// Crea el directorio de destino System.out.println ("El directorio de destino no existe, listo para crear ..."); if (! Destdir.mkdir ()) {System.out.println ("Copiar directorio fallido: ¡la creación del directorio de destino fallido!"); devolver falso; }} Boolean Flag = True; Archivo [] files = srcdir.listfiles (); for (int i = 0; i <files.length; i ++) {// Copiar archivo if (files [i] .ISfile ()) {flag = copyFileUtil.CopyFile (archivos [i] .getabsolutePath (), destdirName+archivos [i] .getName (), overlalay); if (! flag) rompa; } else if (files [i] .IsDirectory ()) {flag = copyFileUtil.CopyDirectory (files [i] .getAbSolutePath (), destdirname + archivos [i] .getName (), superposición); if (! flag) rompa; }} if (! flag) {mensaje = "Copiar directorio" + srcdirname + "a" + destdirname + "fallido!"; JOpttionPane.ShowMessEdialog (NULL, MENSAJE); devolver falso; } else {return true; }} public static void main (string [] args) {string srcdirname = "c:/test/test0/test1"; Cadena DestDirname = "C:/ttt"; CopyFileUtil.CopyDirctory (srcdirname, destdirname, true); }}Sin considerar la optimización múltiple, la forma más rápida de copiar archivos de un solo subproceso es (cuanto mayor es el archivo, más ventaja es, generalmente es más de 30% más rápido que los métodos de uso común):
niotransfercopy vacío estático privado (fuente de archivo, objetivo de archivo) {fileChannel in = null; FileChannel out = null; FileInputStream Insteam = NULL; FileOutputStream Outstream = null; intente {InSteam = new FileInputStream (fuente); Outstream = nuevo FileOutputStream (Target); in = InSteam.getChannel (); out = outstream.getChannel (); in.transferto (0, in.size (), out); } catch (ioException e) {E.PrintStackTrace (); } Finalmente {Close (InSteam); cerrar (in); cerrar (outstream); venta); }}Si necesita monitorear el progreso de la replicación, puede usar el segundo método más rápido (preste atención al tamaño del búfer, que tiene un gran impacto en la velocidad):
niobuffopy void estático privado (fuente de archivo, destino de archivo) {fileChannel in = null; FileChannel out = null; FileInputStream Insteam = NULL; FileOutputStream Outstream = null; intente {InSteam = new FileInputStream (fuente); Outstream = nuevo FileOutputStream (Target); in = InSteam.getChannel (); out = outstream.getChannel (); Bytebuffer buffer = bytebuffer.allocate (4096); while (in.read (buffer)! = -1) {buffer.flip (); out.write (buffer); buffer.clear (); }} catch (ioException e) {E.PrintStackTrace (); } Finalmente {Close (InSteam); cerrar (in); cerrar (outstream); venta); }}El método 1 común es:
Private static void customBufferBufferedStreamCopy (fuente de archivo, destino de archivo) {inputStream fis = null; OutputStream fos = null; intente {fis = new BufferedInputStream (new FileInputStream (fuente)); fos = new BufferedOutputStream (nuevo FileOutputStream (Target)); byte [] buf = nuevo byte [4096]; int i; while ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (Exception e) {E.PrintStackTrace (); } Finalmente {cerrar (fis); cerrar (fos); }}El método 2 comúnmente utilizado es:
Private static void customBufferStreamCopy (Fuente de archivo, destino de archivo) {inputStream fis = null; OutputStream fos = null; intente {fis = new FileInputStream (fuente); fos = nuevo FileOutputStream (Target); byte [] buf = nuevo byte [4096]; int i; while ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (Exception e) {E.PrintStackTrace (); } Finalmente {cerrar (fis); cerrar (fos); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.