Java Unzip Zip - หลายไฟล์ (รวมถึงโฟลเดอร์) ดังนี้:
บีบอัดหลายไฟล์และโฟลเดอร์และคลายไดเรกทอรีไฟล์ที่ซับซ้อน
วิธีการบีบอัดใช้พารามิเตอร์ตัวแปรซึ่งสามารถบีบอัด 1 กับหลายไฟล์ มันสามารถเขียนในอาร์เรย์หรือเขียนลงในรายการพารามิเตอร์ทีละ ...
zipfiles (zip, "abc", ไฟล์ใหม่ ("d:/ภาษาอังกฤษ"), ไฟล์ใหม่ ("d:/การออก data.xls"));โครงสร้างไดเรกทอรีไฟล์ทดสอบ:
เนื้อหาที่บีบอัดของการทดสอบ: โฟลเดอร์ภาษาอังกฤษและไฟล์ Excel สองไฟล์ในระดับเดียวกัน
ไฟล์ [] files = ไฟล์ใหม่ [] {ไฟล์ใหม่ ("d:/ภาษาอังกฤษ"), ไฟล์ใหม่ ("d:/การออก data.xls"), ไฟล์ใหม่ ("d:/chinese name.xls")};นี่คือรหัสบีบอัด:
/ ** * ไฟล์บีบอัด - เนื่องจากต้องออกไปข้างนอกการเรียกซ้ำ, ห่อหุ้มวิธีการ * เรียก zipfiles (zipoutputStream, เส้นทางสตริง, ไฟล์ ... srcfiles) * @param zip * @param path * @param srcfiles * @throws ioexception * @authorisea533 โยน ioexception {zipoutputStream out = new ZipOutputStream (ใหม่ fileOutputStream (ZIP)); ziptest.zipfiles (ออก, เส้นทาง, srcfiles); out.close (); System.out.println ("********************************* การบีบอัด ******************************************************* }/*** ไฟล์บีบอัดไฟล์* @param zipfile zipfile* @param srcfiles ไฟล์ต้นฉบับบีบอัด* @author isea533*/โมฆะสาธารณะคงที่ zipfiles (zipoutputstream ออก, เส้นทางสตริง, ไฟล์ ... srcfiles) {path.replaceal if (! path.endswith ("/")) {path+= "/"; } byte [] buf = ไบต์ใหม่ [1024]; ลอง {สำหรับ (int i = 0; i <srcfiles.length; i ++) {ถ้า (srcfiles [i] .isdirectory ()) {ไฟล์ [] ไฟล์ = srcfiles [i] .listfiles (); สตริง srcPath = srcfiles [i] .getName (); srcpath = srcpath.replaceall ("//*", "/"); if (! srcpath.endswith ("/")) {srcpath+= "/"; } out.putNextEntry (zipentry ใหม่ (เส้นทาง+srcpath)); zipfiles (ออก, เส้นทาง+srcpath, ไฟล์); } else {fileInputStream ใน = ใหม่ fileInputStream (srcfiles [i]); System.out.println (พา ธ + srcfiles [i] .getName ()); out.putnextentry (zipentry ใหม่ (พา ธ + srcfiles [i] .getName ())); int len; ในขณะที่ ((len = in.read (buf))> 0) {out.write (buf, 0, len); } out.closeentry (); in.close (); }}} catch (exception e) {e.printstacktrace (); -ในระหว่างการบีบอัดให้ตัดสินในโฟลเดอร์แล้วบีบอัดไฟล์ซ้ำ
แล้วคลายซิป:
/ ** * คลายซิปไปยังไดเรกทอรีที่ระบุ * @param zippath * @param descdir * @author isea533 */ โมฆะคงที่สาธารณะ unzipfiles (สตริง zippath, สตริง descdir) โยน ioexception {unzipfiles (ไฟล์ใหม่ (zippath), descdir); } / ** * คลายซิปไฟล์ไปยังไดเรกทอรีที่ระบุ * @param zipfile * @param descdir * @author isea533 * / @suppresswarnings ("rawtypes") โมฆะคงที่สาธารณะ if (! pathfile.exists ()) {pathfile.mkdirs (); } zipfile zip = zipfile ใหม่ (zipfile); สำหรับ (การแจงนับรายการ = zip.getentries (); entries.hasmoreElements ();) {zipentry entry = (zipentry) รายการ. nextElement (); string zipentryName = entry.getName (); inputStream ใน = zip.getInputStream (รายการ); string outpath = (descdir+zipentryName) .replaceall ("//*", "/") ;; // ตัดสินว่าเส้นทางมีอยู่หรือไม่ หากไม่มีอยู่ให้สร้างไฟล์พา ธ ไฟล์ไฟล์ = ไฟล์ใหม่ (outpath.substring (0, outpath.astIndexof ('/'))); if (! file.exists ()) {file.mkdirs (); } // ตัดสินว่าเส้นทางเต็มของไฟล์เป็นโฟลเดอร์หรือไม่ หากอัปโหลดข้างต้นไม่จำเป็นต้องคลายการบีบอัดหาก (ไฟล์ใหม่ (outpath) .isdirectory ()) {ดำเนินการต่อ; } // เอาต์พุตไฟล์พา ธ ข้อมูล System.out.println (outpath); outputStream out = new fileOutputStream (outpath); ไบต์ [] buf1 = ไบต์ใหม่ [1024]; int len; ในขณะที่ ((len = in.read (buf1))> 0) {out.write (buf1,0, len); } in.close (); out.close (); } system.out.println ("*****************************************"); -เมื่อคลายการบีบอัดให้พิจารณาว่าโฟลเดอร์ไม่มีอยู่และสร้างโฟลเดอร์เท่านั้นไม่ใช่การบีบอัด ... เพราะการบีบอัดสำหรับไฟล์ไม่ใช่โฟลเดอร์และโฟลเดอร์จะต้องสร้างขึ้นด้วยตัวเอง
วิธีทดสอบ:
โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น ioexception {/*** ไฟล์บีบอัด*/ไฟล์ [] ไฟล์ = ไฟล์ใหม่ [] {ไฟล์ใหม่ ("d:/ภาษาอังกฤษ") ไฟล์ใหม่ ("d:/export data.xls") ไฟล์ใหม่ ("d:/ชื่อภาษาจีน" ไฟล์ zip = ไฟล์ใหม่ ("d:/compressed.zip"); ZipFiles (Zip, "ABC", ไฟล์); /*** ไฟล์ UNZIP*/ไฟล์ zipfile = ไฟล์ใหม่ ("d:/compressed.zip"); String path = "D:/zipfile/"; unzipfiles (zipfile, path); -วิธีการทดสอบไม่ได้จัดการกับข้อยกเว้นนี่เป็นสิ่งที่ผิดโปรดอย่าเลียนแบบ
ผลลัพธ์ผลลัพธ์:
ABC/English/Templete.xls
ABC/English/Chinese/CSDN/ISEA/533/ABC/Templete.xls
ABC/อังกฤษ/จีน/CSDN/ISEA/533/ABC/ZIPFILE2/Templete.xls
ABC/อังกฤษ/จีน/CSDN/ISEA/533/ABC/ZIPFILE2/ZIPFILE/ABC/Templete.xls
ABC/อังกฤษ/จีน/CSDN/ISEA/533/ABC/ZIPFILE2/ZIPFILE/ABC/ZIPFILE2/Templete.xls
ABC/อังกฤษ/จีน/CSDN/ISEA/533/ABC/ZIPFILE2/ZIPFILE/ABC/ZIPFILE2/รายการรวบรวมบัตร
ABC/อังกฤษ/จีน/CSDN/ISEA/533/ABC/ZIPFILE2/รายการรวบรวมบัตร
ABC/English/Chinese/CSDN/ISEA/Templete.xls
ABC/ภาษาอังกฤษ/จีน/CSDN/ISEA/CARD COLLECTION LIST.XLS
ABC/ภาษาอังกฤษ/จีน/csdn/templete.xls
ABC/English/Card รับ list.xls
abc/ออก data.xls
abc/chinese name.xls
******************* การบีบอัดเสร็จแล้ว ***************************
d:/zipfile/abc/chinese name.xls
d:/zipfile/abc/ปัญหา data.xls
d:/zipfile/abc/อังกฤษ/การ์ดรับ list.xls
d:/zipfile/abc/english/chinese/csdn/templete.xls
D:/zipfile/abc/อังกฤษ/จีน/csdn/isea/card collection list.xls
d:/zipfile/abc/english/chinese/csdn/isea/templete.xls
D: /zipfile/abc/english/chinese/csdn/isea/533/abc/templete.xls
d:/zipfile/abc/english/templete.xls
d:/zipfile/abc/english/chinese/csdn/isea/533/abc/zipfile2/templete.xls
d:/zipfile/abc/english/chinese/csdn/isea/533/abc/zipfile2/zipfile/abc/templete.xls
d:/zipfile/abc/english/chinese/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/templete.xls
d:/zipfile/abc/อังกฤษ/จีน/csdn/isea/533/abc/zipfile2/zipfile/abc/zipfile2/card collection list.xls
d:/zipfile/abc/อังกฤษ/จีน/csdn/isea/533/abc/zipfile2/รายการที่ได้รับการ์ด. xls
-
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น