Menyalin file menggunakan java dapat digunakan di mana -mana. Berikut adalah kelas untuk referensi Anda. Ada dua metode secara total:
public static boolean copyFile (String srcfilename, string destfilename, overlay boolean); public static boolean copyDirctory (string srcdirname, string destdirname, overlay boolean);
di dalam:
Nama file srcfilename yang akan disalin
nama file target descfilename
overlay Jika ada file target, apakah akan menimpanya. Jika salinannya berhasil, kembalikan true, jika tidak kembalikan false
Kode:
impor java.io.file; impor java.io.fileInputStream; impor java.io.filenotfoundException; impor java.io.fileoutputStream; impor java.io.ioException; impor java.io.inputstream; impor java.io.outputStream; impor javax.swing.joptionpane; / ** * Salin file atau folder * * zww */ kelas publik copyFileutil {private static string message = ""; /** * Copy a single file* * @param srcFileName * File name to be copied* @param descFileName * Target file name* @param overlay * If the target file exists, whether to overwrite* @return If the copy is successful, return true, otherwise return false */ public static boolean copyFile(String srcFileName, String destFileName, boolean overlay) { File srcFile = file baru (SRCFileName); // Tentukan apakah ada file sumber jika (! Srcfile.exists ()) {message = "file sumber:" + srcfileName + "tidak ada!"; JOPTIONPANE.SHOWMESSADEIALOG (NULL, Pesan); mengembalikan false; } else if (! srcfile.isfile ()) {message = "Salin file gagal, file sumber:" + srcfileName + "Bukan file!"; JOPTIONPANE.SHOWMESSADEIALOG (NULL, Pesan); mengembalikan false; } // Tentukan apakah file target ada file destfile = file baru (destfileName); if (destfile.exists ()) {// Jika file target ada dan memungkinkan impliting if (overlay) {// hapus file target yang ada, terlepas dari apakah file target adalah direktori atau file tunggal file baru (destfileName) .delete (); }} else {// Jika direktori di mana file target tidak ada, buat direktori jika (! destfile.getParentFile (). Exists ()) {// direktori di mana file target tidak ada jika (! destfile.getParentFile (). mkdirs ()) {// gagal untuk menyalin file: gagal untuk membuat file yang dikembalikan; }}} // Salin file int byteread = 0; // jumlah byte baca inputstream in = null; OutputStream out = null; coba {in = new fileInputStream (srcfile); out = FileOutputStream baru (destfile); byte [] buffer = byte baru [1024]; while ((byteread = in.read (buffer))! = -1) {out.write (buffer, 0, byteread); } return true; } catch (FileNotFoundException e) {return false; } catch (ioException e) {return false; } akhirnya {coba {if (out! = null) out.close (); if (in! = null) in.close (); } catch (ioException e) {e.printstacktrace (); }}}} / ** * Salin konten dari seluruh direktori * * @param srcdirname * nama direktori dari direktori yang akan disalin * @param destdirname * nama direktori * @param overlay * jika string target, apakah akan menimpa naungan * @return jika salinannya berhasil, sebaliknya FALSE FALSE * destdirname, overlay boolean) {// Tentukan apakah direktori sumber ada file srcdir = file baru (srcdirname); if (! srcdir.exists ()) {message = "Salin Direktori Gagal: Direktori Sumber" + SrcDirname + "Jangan ada!"; JOPTIONPANE.SHOWMESSADEIALOG (NULL, Pesan); mengembalikan false; } else if (! srcdir.isdirectory ()) {message = "Salin Direktori Gagal:" + SrcdirName + "Bukan direktori!"; JOPTIONPANE.SHOWMESSADEIALOG (NULL, Pesan); mengembalikan false; } // Jika nama direktori target tidak berakhir dengan pembatas file, tambahkan pembatas file jika (! Destdirname.endswith (file.separator)) {destdirname = destdirname + file.separator; } File destdir = file baru (destdirname); // Jika ada folder target jika (destdir.exists ()) {// over overlay diperbolehkan, hapus direktori target yang ada jika (overlay) {file baru (destdirname) .delete (); } else {message = "Salin Direktori Gagal: direktori tujuan" + destdirname + "Sudah ada!"; JOPTIONPANE.SHOWMESSADEIALOG (NULL, Pesan); mengembalikan false; }} else {// Buat Destination Directory System.out.println ("Direktori tujuan tidak ada, siap untuk membuat ..."); if (! destdir.mkdir ()) {System.out.println ("Salin Direktori Gagal: Membuat Direktori Tujuan Gagal!"); mengembalikan false; }} bendera boolean = true; File [] file = srcdir.listFiles (); untuk (int i = 0; i <file if (! flag) break; } else if (file [i] .isDirectory ()) {flag = copyFileutil.copyDirectory (file [i] .getAbsolutePath (), destdirname + file [i] .getName (), overlay); if (! flag) break; }} if (! flag) {message = "Salin Direktori" + SrcDirName + "ke" + destDirname + "Gagal!"; JOPTIONPANE.SHOWMESSADEIALOG (NULL, Pesan); mengembalikan false; } else {return true; }} public static void main (string [] args) {string srcdirname = "c:/test/test0/test1"; String destdirname = "c:/ttt"; Copyfileutil.copydirctory (srcdirname, destdirname, true); }}Tanpa mempertimbangkan optimasi multi-thread, cara tercepat untuk menyalin file satu threaded adalah (semakin besar file, semakin banyak keuntungan, umumnya 30+% lebih cepat dari metode yang umum digunakan):
private static void niotransfercopy (sumber file, target file) {filechannel in = null; FileChannel out = null; FileInputStream instream = null; FileOutputStream outstream = null; coba {instream = new fileInputStream (sumber); outstream = FileOutputStream baru (target); di = instream.getchannel (); out = outstream.getchannel (); in.transferto (0, in.size (), out); } catch (ioException e) {e.printstacktrace (); } akhirnya {tutup (instream); tutup (dalam); tutup (outstream); obral); }}Jika Anda perlu memantau kemajuan replikasi, Anda dapat menggunakan metode tercepat kedua (perhatikan ukuran buffer, yang memiliki dampak besar pada kecepatan):
private static void nioBufferCopy (sumber file, target file) {filechannel in = null; FileChannel out = null; FileInputStream instream = null; FileOutputStream outstream = null; coba {instream = new fileInputStream (sumber); outstream = FileOutputStream baru (target); di = instream.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 (); } akhirnya {tutup (instream); tutup (dalam); tutup (outstream); obral); }}Metode 1 yang umum digunakan adalah:
private static void customBufferBufferedStreamCopy (sumber file, target file) {inputStream fis = null; OutputStream fos = null; coba {fis = baru bufferedInputStream (fileInputStream baru (sumber)); fos = baru bufferedOutputStream (FileOutputStream baru (target)); byte [] buf = byte baru [4096]; int i; while (((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (Exception e) {e.printstacktrace (); } akhirnya {tutup (fis); tutup (fos); }}Metode yang biasa digunakan 2 adalah:
private static void customBufferstreamCopy (sumber file, target file) {inputStream fis = null; OutputStream fos = null; coba {fis = new fileInputStream (sumber); fos = FileOutputStream baru (target); byte [] buf = byte baru [4096]; int i; while (((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (Exception e) {e.printstacktrace (); } akhirnya {tutup (fis); tutup (fos); }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.