บทความนี้อธิบายถึงคลาสการบีบอัด ZIP และคลาสเครื่องมือการบีบอัดที่นำมาใช้ใน Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
นำเข้า Java.io.BufferedInputStream; นำเข้า Java.io.bufferedOutputstream; นำเข้า Java.io.file; นำเข้า java.io.fileinputstream นำเข้า java.io.filenotfoundexception; นำเข้า Java.io.fileoutputstream; java.util.enumeration; นำเข้า org.apache.tools.zip.zipentry; นำเข้า org.apache.tools.zip.zipfile; นำเข้า org.apache.tools.zip.zipoutputstream; Ziputil คลาสสาธารณะ / ** * ไฟล์บีบอัด * * @param zipfilename * บันทึกพา ธ ไฟล์แพ็คเกจบีบอัดที่บันทึกไว้ * @param filepath * โฟลเดอร์หรือพา ธ ไฟล์ที่ต้องบีบอัด * @param isdelete * ไม่ว่าจะลบไฟล์แหล่งที่มา * @throws ไฟล์ (filepath), isdelete); } / ** * ไฟล์บีบอัด * * @param zipfilename * บันทึกพา ธ ไฟล์แพ็คเกจบีบอัดที่บันทึกไว้ * @param inputfile * โฟลเดอร์หรือไฟล์ที่ต้องบีบอัด * @param isdelete * ไม่ว่าจะลบไฟล์แหล่งที่มา * @throws zipoutputStream (ใหม่ fileOutputStream (zipfilename)); if (! inputfile.exists ()) {โยน FilenotFoundException ใหม่ ("ไม่พบไฟล์ที่จะถูกบีบอัดในเส้นทางที่ระบุ!"); } zip (out, inputfile, "", isdelete); out.close (); } / ** * วิธีการบีบอัดแบบเรียกซ้ำ * * @param out * สตรีมเอาท์พุทแพ็คเกจบีบอัด * @param f * ไฟล์ที่จะบีบอัด * @param base * เส้นทางบีบอัด * @param isdelete * ไม่ว่าจะลบไฟล์แหล่งที่มา * @throws (inputfile.isdirectory ()) {// ถ้าเป็นไฟล์ไดเรกทอรี [] inputfiles = inputfile.listfiles (); out.putnextentry (zipentry ใหม่ (ฐาน + "/")); base = base.length () == 0? "": ฐาน + "/"; สำหรับ (int i = 0; i <inputfiles.length; i ++) {zip (out, inputfiles [i], base+inputfiles [i] .getName (), isdelete); }} else {// ถ้าเป็นไฟล์ถ้า (base.length ()> 0) {out.putNextEntry (zipentry ใหม่ (ฐาน)); } else {out.putnextentry (zipentry ใหม่ (inputfile.getName ())); } fileInputStream ใน = new FileInputStream (inputFile); ลอง {int len; Byte [] buff = byte ใหม่ [bufferedSize]; ในขณะที่ ((len = in.read (buff))! = -1) {out.write (buff, 0, len); }} catch (ioexception e) {โยน e; } ในที่สุด {in.close (); }} if (isDelete) {inputFile.delete (); }} / ** * decompress * * @param zipfilepath * บีบอัดพา ธ แพ็คเกจ * @param filesavepath * unzip path * @param isdelete * ไม่ว่าจะเป็นการลบไฟล์ต้นฉบับ * @throws exception * / public void unzip (zipfilepath ไฟล์ f = ไฟล์ใหม่ (zipfilepath); if ((! f.exists ()) && (f.length () <= 0)) {โยนข้อยกเว้นใหม่ ("ไฟล์ที่จะคลายการบีบอัดไม่มีอยู่!"); } zipfile zipfile = zipfile ใหม่ (f); String strpath, gbkpath, strtemp; ไฟล์ tempfile = ไฟล์ใหม่ (filesavepath); // เริ่มจากไดเรกทอรีปัจจุบัน strpath = tempfile.getabsolutepath (); // ตำแหน่งสัมบูรณ์ของการแจงนับเอาต์พุต <zipentry> e = zipfile.getentries (); ในขณะที่ (e.hasmoreElements ()) {org.apache.tools.zip.zipentry zipent = e.nextElement (); gbkpath = zipent.getName (); if (zipent.isdirectory ()) {strtemp = strpath + file.separator + gbkpath; ไฟล์ dir = ไฟล์ใหม่ (strtemp); dir.mkdirs (); ดำเนินการต่อ; } else {// อ่านและเขียน file inputStream คือ = zipfile.getInputStream (zipent); bufferedInputStream bis = ใหม่ bufferedInputStream (IS); gbkpath = zipent.getName (); strtemp = strpath + file.Sparator + gbkpath; // สร้างสตริงไดเรกทอรี strsubdir = gbkpath; สำหรับ (int i = 0; i <strsubdir.length (); i ++) {ถ้า (strsubdir.substring (i, i + 1) .equalsignorecase ("/")) {สตริงอุณหภูมิ = strpath + ไฟล์ ไฟล์ subdir = ไฟล์ใหม่ (อุณหภูมิ); if (! subdir.exists ()) subdir.mkdir (); }} fileOutputStream fos = ใหม่ fileOutputStream (strTemp); BufferedOutputStream BOS = ใหม่ bufferedOutputStream (FOS); int len; Byte [] buff = byte ใหม่ [bufferedSize]; ในขณะที่ ((len = bis.read (buff))! = -1) {bos.write (buff, 0, len); } bos.close (); fos.close (); }}} catch (exception e) {e.printstacktrace (); โยน e; } if (iSdelete) {ไฟล์ใหม่ (zipfilepath) .delete (); }} // โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// ziputil cpr = new ziputil (); // ลอง {// cpr.zip ("c:/ผู้ใช้/ผู้ใช้ Lenovo/desktop/test chinese.zip", "C:/ผู้ใช้/ผู้ใช้ Lenovo CPR.UNZIP ("C:/ผู้ใช้/ผู้ใช้ Lenovo/เดสก์ท็อป/ทดสอบ chinese.zip", "c:/ผู้ใช้/ผู้ใช้ Lenovo/เดสก์ท็อป/โฟลเดอร์ใหม่ 2", false); //} catch (Exception e) {// e.printstacktrace (); //} ////สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "บทสรุปของไฟล์ Java และทักษะการใช้งานไดเรกทอรี", "การสอนเกี่ยวกับโครงสร้างข้อมูลและอัลกอริทึมของ Java", "บทสรุปของทักษะการดำเนินงาน Java Dom Node"
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน