แม้ว่า Java จะจัดให้มีคลาสการทำงานของ IO ที่สามารถประมวลผลไฟล์ได้ แต่ก็ไม่มีวิธีการคัดลอกไฟล์ คัดลอกไฟล์เป็นสิ่งสำคัญ อย่างไรก็ตามมีหลายวิธีที่สามารถทำซ้ำได้โดยไฟล์ Java และวิธีการที่ได้รับความนิยมมากที่สุดใน 4 มีการระบุไว้ด้านล่าง
1. คัดลอกด้วย filestreams
นี่เป็นวิธีที่คลาสสิกที่สุดในการคัดลอกเนื้อหาของไฟล์หนึ่งไปยังไฟล์อื่น อ่านไบต์ของไฟล์ A โดยใช้ FileInputStream และเขียนลงในไฟล์ B ด้วย FileOutputStream นี่คือรหัสของวิธีแรก:
โมฆะคงที่ copyfileusingFilestreams (แหล่งที่มาของไฟล์, dest file) พ่น IOException {inputstream input = null; [1024];เมื่อคุณเห็นข้อมูลบางอย่างของการอ่านและการเขียนสิ่งนี้ควรมีประสิทธิภาพต่ำ
2. ใช้ filechannel เพื่อคัดลอก
Java Nio รวมถึงวิธีการ TransferFrom ซึ่งควรเร็วกว่าการคัดลอกการไหลของไฟล์ตามเอกสาร นี่คือรหัสของวิธีที่สอง:
โมฆะคงที่ copyfileusingFileChannels (แหล่งที่มาไฟล์ dest) พ่น IOException {FileChannel InputChannel = NULL; , 0, inputchannel.size ());3. ใช้ Commons IO เพื่อคัดลอก
Apache Commons IO ให้วิธีการคัดลอกไฟล์ในคลาส Fileutils ซึ่งสามารถใช้ในการคัดลอกไฟล์หนึ่งไปยังอีกที่หนึ่ง มันสะดวกมากสำหรับคุณที่จะใช้โครงการของคุณเมื่อใช้คลาส Apache Commons Fileutils โดยทั่วไปคลาสนี้ใช้ Java Nio Filechannel นี่คือรหัสของวิธีที่สาม:
โมฆะคงแบบคงที่ private CopyFileusingApacheCommonsio (แหล่งที่มาของไฟล์, ไฟล์ dest) พ่น ioexception {fileutils.copyfile (แหล่งที่มา, dest);}4. คัดลอกด้วยคลาสไฟล์ของ Java7
หากคุณมีประสบการณ์ใน Java 7 คุณอาจรู้ว่าคุณสามารถใช้วิธีการคัดลอกไฟล์ไฟล์เพื่อคัดลอกจากไฟล์หนึ่งไปยังไฟล์อื่น นี่คือรหัสของวิธีที่สี่:
โมฆะแบบคงที่ส่วนตัว copyfileusingJava7Files (แหล่งที่มาไฟล์, ไฟล์ dest) พ่น ioexception {files.copy (source.topath (), dest.topath ());}5. ทดสอบ
ตอนนี้ดูว่าหนึ่งในวิธีใดที่มีประสิทธิภาพมากกว่าเราจะคัดลอกไฟล์ขนาดใหญ่เพื่อใช้โปรแกรมง่ายๆแต่ละโปรแกรม จากแคชเพื่อหลีกเลี่ยงประสิทธิภาพใด ๆ เราจะใช้ไฟล์ต้นฉบับที่แตกต่างกันสี่ไฟล์และไฟล์เป้าหมายที่แตกต่างกันสี่ไฟล์ ลองดูที่รหัส:
นำเข้า Java.io.File; .nio.file.files; นำเข้า org.apache.commons.io.fileutils; /nikos7//desktop/files/sourcefile1.txt "); ไฟล์ dest = ไฟล์ใหม่ (" c: //users/nikos7//desktop/files/destfile1.txt ); = ไฟล์ใหม่ ("c: //users/nikos7//desktop/files//sourcefile2.txt"); แหล่งที่มา, dest); end = system.nanotime (); //users//nikos7//desktop//sourcefile3.txt "); dest = ไฟล์ใหม่ (" c: //users//nikos7//desktop/files/destfile3.txt "); start = system.nanotime () เวลา (); //files//sourcefile4.txt "); dest = ไฟล์ใหม่ (" c: //users/nikos7//desktop/files/destfile4.txt "); start = system.nanotime (); end = system.nanotime (); NULL; เขียน (buf, 0, bytesread);}} ในที่สุด {input.close (); null; ลอง {inputchannel = new FileInputStream (แหล่งที่มา) .getChannel (); {InputChannel.close (); outputChannel.close ();}} โมฆะส่วนตัวคงที่ copyfileusingjava7files (ไฟล์ dest) พ่นไฟล์ ioexcepion (source.topath (), dest.topath (); , ไฟล์ dest) พ่น ioexception {fileutils.copyfile (แหล่งที่มา, dest);}}}เอาท์พุท:
Time taken by Filestreams Copy = 127572360Time taken by FileChannels Copy = 10449963Time taken by Java7 Files Copy = 1080833333333333333333333333333333333333333333333333time By Apache Commons IO Copy = 17971677
เช่นเดียวกับที่คุณเห็น FileChannels คัดลอกไฟล์ขนาดใหญ่เป็นวิธีที่ดีที่สุด หากคุณจัดการไฟล์ขนาดใหญ่คุณจะสังเกตเห็นความแตกต่างของความเร็วมากขึ้น นี่คือตัวอย่าง
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้