Copiar arquivos usando Java pode ser usado em todos os lugares. Aqui está uma aula para sua referência. Existem dois métodos no total:
public static boolean copyfile (string srcfileName, string destfilename, sobreposição booleana); public static boolean copydirctory (string srcdirName, string destdirName, sobreposição booleana);
em:
nome do arquivo srcfilename a ser copiado
Descfilename Nome do arquivo de destino
Sobreposição Se o arquivo de destino existir, seja substituí -lo. Se a cópia for bem -sucedida, retorne true, caso contrário, retorne falsos
Código:
importar java.io.file; importar java.io.fileInputStream; importar java.io.filenotfoundException; importar java.io.fileOutputStream; importar java.io.ioException; importar java.io.inputStream; importar java.io.OutputStream; importar javax.swing.JOptionPane; / ** * Copiar arquivo ou pasta * * zww */ public class copyfileUtil {private static string message = ""; / ** * copie um único arquivo * * @param srcfileName * nome do arquivo a ser copiado * @param descfilename * Nome do arquivo de destino * @param sobreposição * Se o arquivo de destino existir, seja substituído * @REGURN SRCFilen, retorne a verdade, retornar FALSE */ public staticean copyFile (stracs sr for bem -sucedido, de outra forma, retornar FILDRATRATRATR, SURCFFILER) novo arquivo (srcfilename); // Determine se o arquivo de origem existe se (! Srcfile.exists ()) {message = "file de origem:" + srcfileName + "não existe!"; JoptionPane.ShowMessAgedialog (null, mensagem); retornar falso; } else if (! srcfile.isfile ()) {message = "copy arquivo falhou, arquivo de origem:" + srcfilename + "não é um arquivo!"; JoptionPane.ShowMessAgedialog (null, mensagem); retornar falso; } // Determine se o arquivo de destino existe o arquivo destfile = novo arquivo (destfileName); if (destfile.exists ()) {// se o arquivo de destino existir e permitir a sobrescrição se (sobreposição) {// exclua o arquivo de destino existente, independentemente de o arquivo de destino ser um diretório ou um único arquivo de arquivo (destfileName) .Delete (); }} else {// Se o diretório em que o arquivo de destino não existir, crie o diretório if (! DeStFile.getParentFile (). Exist ()) {// O diretório em que o arquivo de destino não existe se (! }}} // copie o arquivo int byteread = 0; // Número de bytes Leia InputStream em = null; OutputStream out = null; tente {in = new FileInputStream (srcfile); out = new FileOutputStream (Destfile); byte [] buffer = novo byte [1024]; while ((byteread = in.read (buffer))! = -1) {out.write (buffer, 0, byteread); } retornar true; } catch (filenotfoundException e) {return false; } catch (ioexception e) {return false; } finalmente {tente {if (out! = null) out.close (); if (in! = null) in.close (); } catch (ioexception e) {e.printStackTrace (); } } } } /** * Copy the content of the entire directory* * @param srcDirName * Directory name of the directory to be copied* @param destDirName * Destination directory name* @param overlay * If the target directory exists, whether to overwrite* @return If the copy is successful, return true, otherwise false */ public static boolean copyDirctory(String srcDirName, String DestdirName, sobreposição booleana) {// Determine se o diretório de origem existe arquivo srcdir = novo arquivo (srcdirName); if (! srcdir.exists ()) {message = "copy diretório falhou: diretório de origem" + srcdirname + "não existe!"; JoptionPane.ShowMessAgedialog (null, mensagem); retornar falso; } else if (! srcdir.isdirectory ()) {message = "copy diretório falhou:" + srcdirName + "não é um diretório!"; JoptionPane.ShowMessAgedialog (null, mensagem); retornar falso; } // Se o nome do diretório de destino não terminar com um delimitador de arquivo, adicione o delimitador de arquivo se (! DestdirName.endswith (file.separator)) {destdirName = destdirName + file.separator; } Arquivo Destdir = novo arquivo (DestdirName); // se a pasta de destino existir se (destdir.exists ()) {// se for permitida, exclua o diretório de destino existente se (sobreposição) {new File (DestdirName) .Delete (); } else {message = "Copy Directory falhou: Diretório de destino" + DestdirName + "já existia!"; JoptionPane.ShowMessAgedialog (null, mensagem); retornar falso; }} else {// Crie o destino do diretório de destino.out.println ("O diretório de destino não existe, pronto para criar ..."); if (! Destdir.mkdir ()) {System.out.println ("O diretório de cópia falhou: a criação do diretório de destino falhou!"); retornar falso; }} bandeira booleana = true; Arquivo [] arquivos = srcdir.listfiles (); para (int i = 0; i <files.length; i ++) {// copie o arquivo if (files [i] .isfile ()) {flag = copyfileutil.copyfile (files [i] .getabsolutepath (), destdirname+files [i] .getName (), sobreposição); if (! sinalizador) quebrar; } else if (arquivos [i] .isdirectory ()) {flag = copyFileUtil.CopyDirectory (arquivos [i] .getabsolutepath (), destdirName + arquivos [i] .getName (), sobreposição); if (! sinalizador) quebrar; }} if (! flag) {message = "Copy Directory" + srcdirName + "para" + destdirname + "falhou!"; JoptionPane.ShowMessAgedialog (null, mensagem); retornar falso; } else {return true; }} public static void main (string [] args) {string srcdirname = "c:/test/test0/test1"; String destdirname = "c:/ttt"; CopyFileUtil.CopyDircTory (srcdirName, destdirname, true); }}Sem considerar a otimização de vários thread, a maneira mais rápida de copiar arquivos de thread único é (quanto maior o arquivo, mais vantagem é, geralmente é 30+% mais rápido que os métodos comumente usados):
niotansfercopy niotransfercopy privado (fonte de arquivo, destino de arquivo) {filechannel in = null; FileChannel Out = NULL; FileInputStream Instruam = NULL; FileOutputStream Outream = null; tente {Instream = new FileInputStream (fonte); Outream = new FileOutputStream (Target); in = Instream.getChannel (); out = Outream.getChannel (); in.Transferto (0, in.size (), out); } catch (ioexception e) {e.printStackTrace (); } finalmente {close (Instruam); fechar (in); fechar (extrema); fechar (fora); }}Se você precisar monitorar o progresso da replicação, poderá usar o segundo método mais rápido (preste atenção ao tamanho do buffer, que tem um grande impacto na velocidade):
niobuffercopia de vazio estático privado (fonte de arquivo, destino de arquivo) {filechannel in = null; FileChannel Out = NULL; FileInputStream Instruam = NULL; FileOutputStream Outream = null; tente {Instream = new FileInputStream (fonte); Outream = new FileOutputStream (Target); in = Instream.getChannel (); out = Outream.getChannel (); Buffer bytebuffer = bytebuffer.allocate (4096); while (in.read (buffer)! = -1) {buffer.flip (); out.write (buffer); buffer.clear (); }} catch (ioexception e) {e.printStackTrace (); } finalmente {close (Instruam); fechar (in); fechar (extrema); fechar (fora); }}O método 1 comumente usado é:
private estático void CustomBufferBufferStreamCopy (fonte de arquivo, destino do arquivo) {inputStream fis = null; OutputStream fos = null; tente {fis = new bufferInputStream (new FileInputStream (fonte)); fos = new bufferoudoutputStream (new FileOutputStream (Target)); byte [] buf = novo byte [4096]; int i; while ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (Exceção e) {e.printStackTrace (); } finalmente {close (fis); fechar (fos); }}O método 2 comumente usado é:
private estático void CustomBufferStreamCopy (fonte de arquivo, destino do arquivo) {inputStream fis = null; OutputStream fos = null; tente {fis = new FileInputStream (fonte); fos = new FileOutputStream (Target); byte [] buf = novo byte [4096]; int i; while ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (Exceção e) {e.printStackTrace (); } finalmente {close (fis); fechar (fos); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.