แม้ว่า Java จะมีคลาสการทำงานของ IO ที่สามารถจัดการไฟล์ได้ แต่ไม่มีวิธีคัดลอกไฟล์ การคัดลอกไฟล์เป็นการดำเนินการที่สำคัญเมื่อโปรแกรมของคุณต้องจัดการกับไฟล์จำนวนมากที่เกี่ยวข้อง อย่างไรก็ตามมีหลายวิธีในการคัดลอกไฟล์ Java และต่อไปนี้เป็นวิธีที่ได้รับความนิยมมากที่สุด
1. คัดลอกโดยใช้ FileStreams
นี่เป็นวิธีที่คลาสสิกที่สุดในการคัดลอกเนื้อหาของไฟล์หนึ่งไปยังอีกไฟล์หนึ่ง ใช้ FileInputStream เพื่ออ่านไบต์ของไฟล์ A และใช้ FileOutputStream เพื่อเขียนไปยังไฟล์ B นี่คือรหัสสำหรับวิธีแรก:
โมฆะแบบคงที่ส่วนตัว CopyFileusingFilestreams (แหล่งที่มาไฟล์, ไฟล์ dest) พ่น IOException {inputStream input = null; เอาท์พุทเอาท์พุท = null; ลอง {input = new FileInputStream (แหล่งที่มา); output = ใหม่ fileOutputStream (dest); ไบต์ [] buf = ไบต์ใหม่ [1024]; int bytesread; ในขณะที่ ((bytesRead = input.read (buf))> 0) {output.write (buf, 0, bytesRead); }} ในที่สุด {input.close (); output.close (); - อย่างที่คุณเห็นว่าเราดำเนินการอ่านและเขียนหลายครั้งเพื่อลองใช้ข้อมูลดังนั้นนี่ควรเป็นวิธีที่ไม่มีประสิทธิภาพและวิธีต่อไปที่เราจะเห็นวิธีใหม่
2. คัดลอกโดยใช้ FileChannel
Java Nio รวมถึงวิธีการ TransferFrom ซึ่งควรคัดลอกเร็วกว่าสตรีมไฟล์ตามเอกสาร นี่คือรหัสสำหรับวิธีที่สอง:
โมฆะคงที่ส่วนตัวแบบคงที่ CopyFileUsingFileChannels (แหล่งที่มาของไฟล์, ไฟล์ dest) พ่น IOException {fileChannel inputChannel = null; FileChannel outputChannel = null; ลอง {inputChannel = ใหม่ fileInputStream (แหล่งที่มา) .getChannel (); outputChannel = ใหม่ fileOutputStream (dest) .getChannel (); outputChannel.transferFrom (inputchannel, 0, inputchannel.size ()); } ในที่สุด {inputchannel.close (); outputchannel.close (); -3. สำเนาโดยใช้ Commons IO
Apache Commons IO ให้วิธีการคัดลอกไฟล์ในคลาส FileUtils ซึ่งสามารถใช้ในการคัดลอกไฟล์หนึ่งไปยังอีกไฟล์หนึ่ง สะดวกมากเมื่อใช้คลาส Apache Commons Fileutils เมื่อคุณใช้โครงการของคุณแล้ว โดยทั่วไปคลาสนี้ใช้ Java Nio Filechannel internals นี่คือรหัสสำหรับวิธีที่สาม:
โมฆะส่วนตัวคงที่ copyfileusingapacheCommonsio (แหล่งที่มาไฟล์, ไฟล์ dest) พ่น ioexception {fileutils.copyfile (แหล่งที่มา, dest); -4. คัดลอกโดยใช้คลาสไฟล์ของ Java7
หากคุณมีประสบการณ์ใน Java 7 คุณอาจรู้ว่าคุณสามารถใช้วิธีการคัดลอกเพื่อคัดลอกจากไฟล์หนึ่งไปยังอีกไฟล์หนึ่ง นี่คือรหัสสำหรับวิธีที่สี่:
โมฆะคงที่ส่วนตัว copyfileusingJava7Files (แหล่งที่มาไฟล์, ไฟล์ dest) พ่น IOException {files.copy (source.topath (), dest.topath ()); -มาดูรหัสการใช้งานเพื่อคัดลอกไฟล์ Java ไปยังไดเรกทอรีอื่น รหัสเฉพาะมีดังนี้:
แพ็คเกจ com.util; นำเข้า java.io.file; นำเข้า java.io.fileinputstream; นำเข้า java.io.fileOutputStream; นำเข้า java.io.InputStream; คลาสสาธารณะ testhtml {/** * คัดลอกไฟล์ใหม่ * @param @return บูลีน */ โมฆะสาธารณะ copyfile (สตริง oldpath, สตริง newpath) {ลอง {int bytesum = 0; int byteread = 0; ไฟล์ oldfile = ไฟล์ใหม่ (oldpath); if (oldfile.exists ()) {// inputstream instream = new fileInputStream (oldPath); // อ่านในไฟล์ต้นฉบับ fileOutputStream fs = ใหม่ fileOutputStream (newPath); ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1444]; ความยาว int; ในขณะที่ ((byteread = stream.read (บัฟเฟอร์))! = -1) {bytesum += byteread; // bytes ขนาดไฟล์ system.out.println (bytesum); fs.write (บัฟเฟอร์, 0, byteread); } stream.close (); }} catch (exception e) {system.out.println ("ข้อผิดพลาดในการคัดลอกไฟล์เดียว"); E.PrintStackTrace ();}}/** * คัดลอกเนื้อหาโฟลเดอร์ทั้งหมด * @param oldpath สตริงเส้นทางไฟล์ต้นฉบับเช่น: C:/fqf * @param newpath String Path หลังจากการคัดลอกคือ: f:/fqf/ff * @return boolean */public void copyfolder // หากโฟลเดอร์ไม่มีอยู่ให้สร้างไฟล์โฟลเดอร์ใหม่ a = ไฟล์ใหม่ (oldPath); String [] file = A.List (); ไฟล์อุณหภูมิ = null; สำหรับ (int i = 0; i <file.length; i ++) {ถ้า (oldpath.endswith (file.separator)) {temp = ไฟล์ใหม่ (oldpath+ไฟล์ [i]); } else {temp = ไฟล์ใหม่ (oldpath+file.Saperator+ไฟล์ [i]); } if (temp.isfile ()) {fileInputStream input = new FileInputStream (temp); fileOutputStream output = new FileOutputStream (newPath + "/" + (temp.getName ()). toString ()); ไบต์ [] b = ไบต์ใหม่ [1024 * 5]; int len; ในขณะที่ ((len = input.read (b))! = -1) {output.write (b, 0, len); } output.flush (); output.close (); input.close (); } if (temp.isdirectory ()) {// ถ้าเป็น subfolder copyFolder (oldpath+"/"+ไฟล์ [i], newpath+"/"+ไฟล์ [i]); }}} catch (exception e) {system.out.println ("ข้อผิดพลาดในการคัดลอกการดำเนินการเนื้อหาโฟลเดอร์ทั้งหมด"); E.printStackTrace ();}} โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่นข้อยกเว้น {// // นี่คือไฟล์แหล่งที่มาของคุณซึ่งตัวเองมีอยู่ // ไฟล์ก่อนไฟล์ = ไฟล์ใหม่ ("c: /users/administrator/desktop/untitled--2.html"); afterfile = ไฟล์ใหม่ ("c: /users/administrator/desktop/jiekou0/untitled--2.html"); ///// // กำหนดสตรีมอินพุตไฟล์เพื่ออ่านไฟล์ beforefile // fileInputStream fis = fileInputStream (brearfile) FileOutputStream (AfterFile); ///// // พื้นที่แคชไฟล์ // byte [] b = ไบต์ใหม่ [1024]; // // อ่านข้อมูลสตรีมไฟล์ในพื้นที่แคชไฟล์ หากผลการอ่านไม่ใช่ -1 นั่นหมายความว่าไฟล์ยังไม่ได้รับการอ่านและอ่านแล้ว// ขณะที่ (fis.read (b)! = -1) {// // เขียนเนื้อหาในพื้นที่แคชไปยังไฟล์ Afterfile // fos.write (b); // fos.flush (); oldpath = "c: /users/administrator/desktop/untitled-2.html"; String newpath = "c: /users/administrator/desktop/jiekou0/untitled-2.html"; testhtml t = testhtml ใหม่สรุป
ข้างต้นเป็น 4 วิธีในการคัดลอกไฟล์ใน Java และรหัสตัวอย่างของการคัดลอกไฟล์ไปยังไดเรกทอรีอื่นที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!