การคัดลอกไฟล์โดยใช้ Java สามารถใช้ได้ทุกที่ นี่คือคลาสสำหรับการอ้างอิงของคุณ มีสองวิธีทั้งหมด:
Public Static Boolean Copyfile (String srcfilename, String destfilename, การซ้อนทับบูลีน); Public Static Boolean CopyDirctory (String SrcDirName, String DestDirName, Boolean Overlay);
ใน:
ชื่อไฟล์ srcfilename ที่จะคัดลอก
ชื่อไฟล์เป้าหมาย descfilename
ซ้อนทับ หากไฟล์เป้าหมายมีอยู่ไม่ว่าจะเขียนทับ หากสำเนาสำเร็จให้ส่งคืนจริงมิฉะนั้นจะส่งคืน FALSE
รหัส:
นำเข้า Java.io.File; นำเข้า Java.io.FileInputStream; นำเข้า java.io.filenotfoundException; นำเข้า Java.io.FileOutputStream; นำเข้า java.io.ioException; นำเข้า Java.io.InputStream; นำเข้า Java.io.OutputStream; นำเข้า Javax.swing.joptionpane; / ** * คัดลอกไฟล์หรือโฟลเดอร์ * * zww */ คลาสสาธารณะ CopyFileUtil {ข้อความสตริงคงที่ส่วนตัว = ""; / ** * คัดลอกไฟล์เดียว * * @param srcfilename * ชื่อไฟล์ที่จะคัดลอก * @param descfilename * ชื่อไฟล์เป้าหมาย * @param ซ้อนทับ * หากไฟล์เป้าหมายมีอยู่ srcfile = ไฟล์ใหม่ (srcfilename); // ตรวจสอบว่าไฟล์ต้นฉบับมีอยู่หรือไม่ถ้า (! srcfile.exists ()) {message = "ไฟล์แหล่งที่มา:" + srcfilename + "ไม่มีอยู่จริง!"; joptionpane.showmessagedialog (null, ข้อความ); กลับเท็จ; } อื่นถ้า (! srcfile.isfile ()) {message = "คัดลอกไฟล์ล้มเหลวไฟล์แหล่งที่มา:" + srcfilename + "ไม่ใช่ไฟล์!"; joptionpane.showmessagedialog (null, ข้อความ); กลับเท็จ; } // พิจารณาว่าไฟล์เป้าหมายมีอยู่ไฟล์ destFile = ไฟล์ใหม่ (destFileName); if (destFile.Exists ()) {// ถ้าไฟล์เป้าหมายมีอยู่และอนุญาตให้มีการเขียนทับหาก (ซ้อนทับ) {// ลบไฟล์เป้าหมายที่มีอยู่โดยไม่คำนึงว่าไฟล์เป้าหมายเป็นไดเรกทอรีหรือไฟล์ใหม่ไฟล์เดียว (destFileName) .delete (); }} else {// ถ้าไดเรกทอรีที่ไม่มีไฟล์เป้าหมายให้สร้างไดเรกทอรีถ้า (! destFile.getParentFile (). มีอยู่ ()) {// ไดเรกทอรีที่ไฟล์เป้าหมายไม่มีอยู่ถ้า (! destFile.getParentFile () }}} // คัดลอกไฟล์ intteread = 0; // จำนวนไบต์อ่านอินพุตสตรีมใน = null; outputstream out = null; ลอง {in = new fileInputStream (srcfile); out = new fileOutputStream (destFile); ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1024]; ในขณะที่ ((byteread = in.read (บัฟเฟอร์))! = -1) {out.write (บัฟเฟอร์, 0, byteread); } return true; } catch (filenotfoundexception e) {return false; } catch (ioexception e) {return false; } ในที่สุด {ลอง {ถ้า (ออก! = null) out.close (); ถ้า (ใน! = null) in.close (); } catch (ioexception e) {e.printstacktrace (); }}}} / ** * คัดลอกเนื้อหาของไดเรกทอรีทั้งหมด * * @param srcdirname * ชื่อไดเรกทอรีของไดเรกทอรีที่จะคัดลอก * @param destdirname * ชื่อไดเรกทอรีปลายทาง * @param ซ้อนทับ * หากไดเรกทอรีเป้าหมาย DestDirName, Boolean Overlay) {// พิจารณาว่าไดเรกทอรีต้นฉบับมีอยู่ไฟล์ srcdir = ไฟล์ใหม่ (srcdirname); if (! srcdir.exists ()) {message = "คัดลอกไดเรกทอรีล้มเหลว: ไดเรกทอรีแหล่งที่มา" + srcdirname + "ไม่มีอยู่!"; joptionpane.showmessagedialog (null, ข้อความ); กลับเท็จ; } อื่นถ้า (! srcdir.isdirectory ()) {message = "สำเนาไดเรกทอรีล้มเหลว:" + srcdirname + "ไม่ใช่ไดเรกทอรี!"; joptionpane.showmessagedialog (null, ข้อความ); กลับเท็จ; } // หากชื่อไดเรกทอรีเป้าหมายไม่ได้จบลงด้วยตัวคั่นไฟล์ให้เพิ่มตัวคั่นไฟล์ถ้า (! destDirName.endswith (file.Separator)) {destDirName = destDirName + file.separator; } ไฟล์ destDir = ไฟล์ใหม่ (destDirName); // หากโฟลเดอร์เป้าหมายมีอยู่ถ้า (destdir.exists ()) {// ถ้าอนุญาตให้ซ้อนทับให้ลบไดเรกทอรีเป้าหมายที่มีอยู่ถ้า (ซ้อนทับ) {ไฟล์ใหม่ (destDirName) .delete (); } else {message = "คัดลอกไดเรกทอรีล้มเหลว: ไดเรกทอรีปลายทาง" + destDirName + "มีอยู่แล้ว!"; joptionpane.showmessagedialog (null, ข้อความ); กลับเท็จ; }} else {// สร้างไดเรกทอรีปลายทาง System.out.println ("ไดเรกทอรีปลายทางไม่มีอยู่พร้อมที่จะสร้าง ... "); if (! destdir.mkdir ()) {system.out.println ("สำเนาไดเรกทอรีล้มเหลว: การสร้างไดเรกทอรีปลายทางล้มเหลว!"); กลับเท็จ; }} ธงบูลีน = true; ไฟล์ [] files = srcdir.listfiles (); สำหรับ (int i = 0; i <files.length; i ++) {// คัดลอกไฟล์ถ้า (ไฟล์ [i] .isfile ()) {flag = copyfileutil.copyfile (ไฟล์ [i] .getabsolutepath (), destDirName+ไฟล์ [i] ถ้า (ธง) หยุดพัก; } อื่นถ้า (ไฟล์ [i] .isdirectory ()) {flag = copyfileutil.copydirectory (ไฟล์ [i] .getAbsolutepath (), destDirName + ไฟล์ [i] .getName (), ซ้อนทับ); ถ้า (ธง) หยุดพัก; }} if (! flag) {message = "คัดลอกไดเรกทอรี" + srcdirname + "ถึง" + destDirName + "ล้มเหลว!"; joptionpane.showmessagedialog (null, ข้อความ); กลับเท็จ; } else {return true; }} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {สตริง srcdirName = "c:/test/test0/test1"; String destDirName = "C:/TTT"; CopyFileUtil.CopyDirctory (srcdirname, destdirname, true); -โดยไม่คำนึงถึงการเพิ่มประสิทธิภาพแบบหลายเธรดวิธีที่เร็วที่สุดในการคัดลอกไฟล์เธรดเดี่ยวคือ (ยิ่งไฟล์มีขนาดใหญ่เท่าไหร่ก็ยิ่งได้เปรียบมากเท่าไหร่ก็คือโดยทั่วไปแล้วจะเร็วกว่าวิธีการที่ใช้กันทั่วไป 30%):
โมฆะแบบคงที่ส่วนตัว niotransfercopy (แหล่งที่มาไฟล์เป้าหมายไฟล์) {fileChannel ใน = null; fileChannel out = null; fileInputStream instream = null; fileOutputStream Outstream = null; ลอง {instream = new FileInputStream (แหล่งที่มา); Outstream = ใหม่ fileOutputStream (เป้าหมาย); ใน = stream.getChannel (); out = outstream.getChannel (); in.transferto (0, in.size (), ออก); } catch (ioexception e) {e.printstacktrace (); } ในที่สุด {Close (INSTREAM); ปิด (ใน); ปิด (เหนือกว่า); ปิด (ออก); -หากคุณต้องการตรวจสอบความคืบหน้าการจำลองแบบคุณสามารถใช้วิธีที่เร็วที่สุดเป็นอันดับสอง (ให้ความสนใจกับขนาดของบัฟเฟอร์ซึ่งมีผลกระทบอย่างมากต่อความเร็ว):
โมฆะคงที่ส่วนตัว niobuffercopy (แหล่งที่มาไฟล์เป้าหมายไฟล์) {fileChannel ใน = null; fileChannel out = null; fileInputStream instream = null; fileOutputStream Outstream = null; ลอง {instream = new FileInputStream (แหล่งที่มา); Outstream = ใหม่ fileOutputStream (เป้าหมาย); ใน = stream.getChannel (); out = outstream.getChannel (); bytebuffer buffer = bytebuffer.allocate (4096); ในขณะที่ (in.read (บัฟเฟอร์)! = -1) {buffer.flip (); out.write (บัฟเฟอร์); buffer.clear (); }} catch (ioexception e) {e.printstacktrace (); } ในที่สุด {Close (INSTREAM); ปิด (ใน); ปิด (เหนือกว่า); ปิด (ออก); -วิธีที่ใช้กันทั่วไป 1 คือ:
โมฆะแบบคงที่ส่วนตัว CustomBufferBufferedStreamCopy (แหล่งที่มาไฟล์เป้าหมายไฟล์) {inputStream fis = null; OutputStream fos = null; ลอง {fis = new bufferedInputStream (ใหม่ FileInputStream (แหล่งที่มา)); FOS = ใหม่ bufferedOutputStream (ใหม่ fileOutputStream (เป้าหมาย)); ไบต์ [] buf = ไบต์ใหม่ [4096]; int i; ในขณะที่ ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (exception e) {e.printstacktrace (); } ในที่สุด {ปิด (fis); ปิด (fos); -วิธีที่ใช้กันทั่วไป 2 คือ:
โมฆะแบบคงที่ส่วนตัว CustomBuffERStreamCopy (แหล่งที่มาไฟล์เป้าหมายไฟล์) {inputStream fis = null; OutputStream fos = null; ลอง {FIS = ใหม่ FileInputStream (แหล่งที่มา); FOS = ใหม่ fileOutputStream (เป้าหมาย); ไบต์ [] buf = ไบต์ใหม่ [4096]; int i; ในขณะที่ ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (exception e) {e.printstacktrace (); } ในที่สุด {ปิด (fis); ปิด (fos); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น