บทความนี้ส่วนใหญ่แนะนำการใช้คลาสที่เกี่ยวข้องกับ Java เพื่อบีบอัดไฟล์หรือโฟลเดอร์
ZLIB เป็นไลบรารีการบีบอัดข้อมูลที่ออกแบบมาเพื่อประมวลผลข้อมูลบริสุทธิ์ (โดยไม่คำนึงถึงแหล่งที่มาของข้อมูล)
7Z เป็นรูปแบบการบีบอัดใหม่ที่มีอัตราส่วนการบีบอัดสูงสุดในปัจจุบัน
GZIP เป็นเครื่องมือบีบอัดไฟล์ (หรือรูปแบบไฟล์ที่บีบอัดที่สร้างขึ้นโดยเครื่องมือการบีบอัด) และออกแบบมาเพื่อประมวลผลไฟล์แต่ละไฟล์ GZIP ใช้ zlib เมื่อซิปข้อมูลในไฟล์ ในการบันทึกข้อมูลที่เกี่ยวข้องกับคุณสมบัติไฟล์ GZIP จำเป็นต้องบันทึกเนื้อหาส่วนหัวเพิ่มเติมในไฟล์บีบอัด (*.GZ) และ ZLIB ไม่จำเป็นต้องพิจารณาเรื่องนี้ แต่ GZIP เหมาะสำหรับไฟล์เดียวเท่านั้นดังนั้นคำต่อท้ายที่เรามักจะเห็นใน Unix/Linux คือ *.tar.gz หรือ *.tgz ซึ่งหมายความว่าหลายไฟล์จะถูกบรรจุลงในไฟล์เดียวที่มี TAR แล้วบีบอัดด้วย GZIP
ZIP เป็นรูปแบบที่เหมาะสำหรับการบีบอัดหลายไฟล์ (เครื่องมือที่เกี่ยวข้องรวมถึง PKZIP และ Winzip ฯลฯ ) ดังนั้นไฟล์ zip จะต้องมีข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างไดเรกทอรีไฟล์ซึ่งเป็นข้อมูลมากกว่าส่วนหัวของ GZIP อย่างไรก็ตามควรสังเกตว่ารูปแบบ zip สามารถนำอัลกอริทึมการบีบอัดที่หลากหลายมาใช้ ไฟล์ซิปทั่วไปของเราส่วนใหญ่ไม่ได้ถูกบีบอัดโดยใช้อัลกอริทึม ZLIB และรูปแบบของข้อมูลที่บีบอัดนั้นแตกต่างจาก GZIP มาก
ดังนั้นคุณควรเลือกเทคนิคการบีบอัดที่แตกต่างกันตามความต้องการเฉพาะของคุณ: หากคุณต้องการบีบอัด/บีบอัดข้อมูลเท่านั้นคุณสามารถนำไปใช้กับ ZLIB ได้โดยตรง หากคุณต้องการสร้างไฟล์รูปแบบ GZIP หรือคลายผลการบีบอัดของเครื่องมืออื่น ๆ คุณต้องใช้ GZIP หรือ ZIP และคลาสอื่น ๆ ที่เกี่ยวข้องเพื่อจัดการ
การพึ่งพา maven
<การพึ่งพา> <roupId> org.apache.Commons </groupId> <ratifactId> Commons-Compress </artifactId> <version> 1.12 </เวอร์ชัน> </การพึ่งพา>
รูปแบบซิป
public static void zip (อินพุตสตริง, output สตริง, ชื่อสตริง) พ่นข้อยกเว้น {zipoutputStream out = new ZipOutputStream (ใหม่ fileOutputStream (เอาต์พุต)); String [] paths = input.split ("// |"); ไฟล์ [] ไฟล์ = ไฟล์ใหม่ [paths.length]; ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1024]; สำหรับ (int i = 0; i <paths.length; i ++) {ไฟล์ [i] = ไฟล์ใหม่ (พา ธ [i]); } สำหรับ (int i = 0; i <files.length; i ++) {fileInputStream fis = ใหม่ fileInputStream (ไฟล์ [i]); if (files.length == 1 && name! = null) {out.putNextEntry (zipentry ใหม่ (ชื่อ)); } else {out.putnextentry (zipentry ใหม่ (ไฟล์ [i] .getName ())); } int len; // อ่านเนื้อหาของไฟล์ที่คุณต้องดาวน์โหลดและจัดทำมันลงในไฟล์ zip ในขณะที่ ((len = fis.read (บัฟเฟอร์))> 0) {out.write (บัฟเฟอร์, 0, len); } out.closeentry (); fis.close (); } out.close (); } out.close (); - แพ็คเกจ GZIP
โมฆะสาธารณะคงที่ GZIP (อินพุตสตริง, เอาต์พุตสตริง, ชื่อสตริง) พ่นข้อยกเว้น {สตริง compress_name = null; if (name! = null) {compress_name = name; } else {compress_name = ไฟล์ใหม่ (อินพุต) .getName (); } byte [] buffer = byte ใหม่ [1024]; ลอง {gzipparameters gp = new gzipparameters (); // ตั้งชื่อไฟล์ในไฟล์บีบอัด gp.setFilename (compress_name); gzipcompressoroutputstream gcos = ใหม่ gzipcompressoroutputstream (ใหม่ fileOutputStream (เอาต์พุต), GP); FileInputStream FIS = ใหม่ FileInputStream (อินพุต); ความยาว int; ในขณะที่ ((length = fis.read (บัฟเฟอร์))> 0) {gcos.write (บัฟเฟอร์, 0, ความยาว); } fis.close (); gcos.finish (); } catch (ioexception ioe) {ioe.printstacktrace (); - 7Z แพ็ค
โมฆะคงที่สาธารณะ z7Z (อินพุตสตริง, เอาต์พุตสตริง, ชื่อสตริง) พ่นข้อยกเว้น {ลอง {sevenZoutputFile เจ็ด ZOutput = ใหม่ SevenZOutputFile (ไฟล์ใหม่ (เอาต์พุต)); SevenZarchiveEntry entry = null; String [] paths = input.split ("// |"); ไฟล์ [] ไฟล์ = ไฟล์ใหม่ [paths.length]; สำหรับ (int i = 0; i <paths.length; i ++) {ไฟล์ [i] = ไฟล์ใหม่ (พา ธ [i] .trim ()); } สำหรับ (int i = 0; i <files.length; i ++) {bufferedInputStream input = null; Enter = ใหม่ bufferedInputStream (ใหม่ FileInputStream (พา ธ [i])); if (name! = null) {entry = sevenzOutput.createRearchiveEntry (ไฟล์ใหม่ (พา ธ [i]), ชื่อ); } else {entry = sevenzoutput.createRearchiveEntry (ไฟล์ใหม่ (พา ธ [i]), ไฟล์ใหม่ (พา ธ [i]). getName ()); } sevenzoutput.putarchiveentry (รายการ); ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1024]; int len; ในขณะที่ ((len = enterstream.read (บัฟเฟอร์))> 0) {sevenzoutput.write (บัฟเฟอร์, 0, len); } Enter.close (); sevenzoutput.closearchiveentry (); } sevenzoutput.close (); } sevenzoutput.close (); } catch (ioexception ioe) {system.out.println (ioe.toString () + "" + อินพุต); - แพ็คเกจ zlib
โมฆะคงที่สาธารณะ zlib (อินพุตสตริง, เอาต์พุตสตริง) พ่นข้อยกเว้น {// deflaterOutputStream dos = new deflaterOutputStream (ใหม่ fileOutputStream (เอาต์พุต)); deflateParameters dp = new deflateParameters (); dp.setwithzlibheader (จริง); deflatecompressoroutputStream dcos = ใหม่ deflatecompressoroutputStream (ใหม่ fileOutputStream (เอาท์พุท), DP); FileInputStream FIS = ใหม่ FileInputStream (อินพุต); ความยาว int = (int) ไฟล์ใหม่ (อินพุต) .length (); ข้อมูลไบต์ [] = ไบต์ใหม่ [ความยาว]; // ความยาว int; ในขณะที่ ((length = fis.read (data))> 0) {dcos.write (ข้อมูล, 0, ความยาว); } fis.close (); dcos.finish (); dcos.close (); -ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับคุณ นี่คือทั้งหมดที่คุณจะแนะนำเนื้อหาที่ถูกบีบอัดและบรรจุของการใช้งาน Java ของรูปแบบ ZIP, GZIP, 7Z และ ZLIB ฉันหวังว่าทุกคนจะติดตามเว็บไซต์ของเราต่อไป! หากคุณต้องการเรียนรู้ Java คุณสามารถติดตามเว็บไซต์นี้ต่อไปได้