Java unsip zip - ملفات متعددة (بما في ذلك المجلدات) ، على النحو التالي:
اضغط على ملفات ومجلدات متعددة وإلغاء ضغط أدلة الملفات المعقدة.
تستخدم طريقة الضغط معلمات متغيرة ، والتي يمكن أن تضغط 1 على ملفات متعددة. يمكن كتابته في صفيف أو مكتوب في قائمة المعلمات واحدة تلو الأخرى ...
zipfiles (zip ، "ABC" ، ملف جديد ("D:/English") ، ملف جديد ("D:/إصدار data.xls")) ؛بنية دليل الملف:
المحتوى المضغوط للاختبار: المجلد الإنجليزي وملف اثنين من نفس المستوى
file [] files = new file [] {new file ("d:/english") ، ملف جديد ("d:/إصدار data.xls") ، ملف جديد ("d:/صيني name.xls")} ؛هنا هو الرمز المضغوط:
/ ** * ملف مضغوط - نظرًا لأنه يجب أن يكون خارج المكالمة العودية ، قم بتغليف طريقة إلى * استدعاء zipfiles (zipoutputStream Out ، مسار السلسلة ، ملف ... srcfiles) * param zip * param path * param srcfiles يلقي ioException {zipoutputStream out = new zipoutputStream (fileOutputStream جديد (zip)) ؛ ZIPTEST.ZIPFILES (Out ، PATH ، SRCFILES) ؛ out.close () ؛ System.out.println ("*********************************** Compressed ********************") ؛ }/*** ملف مضغوط ملف* param zipfile zipfile* param srcfiles ملف المصدر المضغوط* author isea533*/public static void zipfiles (zipoutputstream out ، مسار السلسلة ، الملف ... srcfiles) {path.replaceall (//* if (! path.endswith ("/")) {path+= "/" ؛ } byte [] buf = new byte [1024] ؛ حاول {for (int i = 0 ؛ i <srcfiles.length ؛ i ++) {if (srcfiles [i] .isdirectory ()) {file [] files = srcfiles [i] .listfiles () ؛ String srcpath = srcfiles [i] .getName () ؛ srcpath = srcpath.replaceall ("//*" ، "/") ؛ if (! srcpath.endswith ("/")) {srcpath+= "/" ؛ } out.putnextentry (zipentry new (path+srcpath)) ؛ zipfiles (Out ، path+srcpath ، files) ؛ } آخر {fileInputStream in = new FileInputStream (srcfiles [i]) ؛ system.out.println (path + srcfiles [i] .getName ()) ؛ out.putnextentry (zipentry new (path + srcfiles [i] .getName ())) ؛ int len ؛ بينما ((len = in.read (buf))> 0) {out.write (buf ، 0 ، len) ؛ } out.closeentry () ؛ in.close () ؛ }}} catch (استثناء e) {E.PrintStackTrace () ؛ }}أثناء الضغط ، أصدر أحكامًا على المجلد ثم ضغط الملف بشكل متكرر.
ثم unxip:
/ ** * unsip إلى الدليل المحدد * param zippath * param descdir * author isea533 */ public static void unzipfiles (String Zippath ، String descdir) يلقي ioException {unzipfiles (ملف جديد (zippath) ، descdir) ؛ } / ** * قم بإلغاء ضغط الملف إلى الدليل المحدد * param zipfile * param descdir * @author isea533 * / suppressWarnings ("rawtypes") الفراغ العام الثابت (ملف جديد) if (! pathfile.exists ()) {pathfile.mkdirs () ؛ } zipfile zip = new zipfile (zipfile) ؛ لـ (إدخالات التعداد = zip.getentRies () ؛ إدخال. String zipentryName = Entpl.getName () ؛ inputStream في = zip.getInputStream (الدخول) ؛ String OutPath = (descdir+zipentryName) .replaceall ("//*" ، "/") ؛؛ // الحكم على ما إذا كان المسار موجود. إذا لم يكن موجودًا ، قم بإنشاء ملف ملف الملف = ملف جديد (OutPath.SubString (0 ، OutPath.lastIndexof ('/'))) ؛ if (! file.exists ()) {file.mkdirs () ؛ } // الحكم على ما إذا كان المسار الكامل للملف هو مجلد. إذا تم تحميله أعلاه ، فليس هناك حاجة لإزالة الضغط إذا (ملف جديد (OutPath) .isdirectory ()) {متابعة ؛ } // إخراج معلومات مسار ملف system.out.println (OutPath) ؛ OutputStream Out = fileOutputStream جديد (OutPath) ؛ byte [] buf1 = new byte [1024] ؛ int len ؛ بينما ((len = in.read (buf1))> 0) {out.write (buf1،0 ، len) ؛ } in.close () ؛ out.close () ؛ } system.out.println ("*********************************************") ؛ }عند إلغاء الضغط ، حدد أن المجلد غير موجود ، وأن ينشئ المجلد فقط ، وليس إلغاء ضغطه ... لأن إزالة الضغط مخصص للملفات ، وليس المجلدات ، ويجب إنشاء المجلدات بأنفسهم.
طريقة الاختبار:
يرمي الفراغ الثابت العام (سلسلة [] args) ioException {/*** ملف مضغوط*/file [] file = file new [] {file new ("d:/english") ، ملف جديد ("d:/export data.xls") ، ملف جديد ("d:/صيني name.xls")} ؛ ملف zip = ملف جديد ("d:/compressed.zip") ؛ zipfiles (zip ، "ABC" ، ملفات) ؛ /*** unsip file*/file zipfile = new file ("d: /Compressed.zip") ؛ string path = "d:/zipfile/" ؛ unzipfiles (zipfile ، path) ؛ }لا تتعامل طريقة الاختبار مع الاستثناء ، وهذا خطأ ، يرجى عدم تقليده.
نتيجة الإخراج:
ABC/English/Templete.xls
ABC/الإنجليزية/الصينية/CSDN/ISEA/533/ABC/TEMPLETE.XLS
ABC/English/Chinese/CSDN/ISEA/533/ABC/ZIPFILE2/TEMPLETE.XLS
ABC/English/الصينية/CSDN/ISEA/533/ABC/ZIPFILE2/ZIPFILE/ABC/TEMPLETE.XLS
ABC/English/Chinese/CSDN/ISEA/533/ABC/ZIPFILE2/ZIPFILE/ABC/ZIPFILE2/TEMPLETE.XLS
ABC/English/Chinese/CSDN/ISEA/533/ABC/ZIPFILE2/ZIPFILE/ABC/ZIPFILE2/CARD COLLEST.XLS
ABC/English/Chinese/CSDN/ISEA/533/ABC/ZIPFILE2/CARD COLLEST
ABC/الإنجليزية/الصينية/CSDN/ISEA/TEMPLETE.XLS
ABC/English/Chinese/CSDN/ISEA/Card Collection List.xls
ABC/الإنجليزية/الصينية/CSDN/TEMPLETE.XLS
ABC/English/CARD SENCE LIST.XLS
ABC/إصدار Data.xls
ABC/NASE NAME.XLS
***************:
D:/Zipfile/ABC/الصينية name.xls
D:/Zipfile/ABC/issue data.xls
D:/Zipfile/ABC/English/CARD LIST.XLS
D: /zipfile/abc/english/chinese/csdn/templete.xls
D:/Zipfile/ABC/English/Chinese/CSDN/ISEA/Card Collection
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/English/Chinese/CSDN/ISEA/533/ABC/ZIPFILE2/ZIPFILE/ABC/ZIPFILE2/CARD COLLEST.XLS
D:/Zipfile/ABC/English/Chinese/CSDN/ISEA/533/ABC/ZIPFILE2/CARD-RECEEVER
**********************************
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.