Java解壓多重zip壓縮包
-- org.apache.commons.compress.archivers.zip.ZipFile結合ZipArchiveInputStream來實現
針對前一篇文章《Java打多重zip壓縮包-- ByteArrayOutputStream結合org.apache.commons.compress來實現》打包后的zip文件如何解壓的問題。
部分代碼如下:
File f = new
File("c:/test.zip"); ZipFile zf = new ZipFile(f,
"gbk"); File folder = new
File("c:/test"); if (!folder.exists()) { folder.mkdirs(); }
for
(Enumeration<ZipArchiveEntry> files = zf.getEntries();
files.hasMoreElements();) {
ZipArchiveEntry zae =
files.nextElement(); String zipname =
zae.getName(); if
(zipname.endsWith(".zip")) { String
innerzip = StringUtils.removeEnd(zipname, ".zip"); File
innerfolder = new File(folder + File.separator + innerzip); if
(!innerfolder.exists()) {
innerfolder.mkdirs(); }
ZipArchiveInputStream zais = new ZipArchiveInputStream(zf.getInputStream(zae),
"GBK", true);
FileOutputStream fos = null;
ZipArchiveEntry innerzae = null; while
((innerzae = zais.getNextZipEntry()) != null) {
fos = new FileOutputStream(folder + File.separator + innerzip +
File.separator + innerzae.getName());
IOUtils.copy(zais, fos); }
zais.close();
fos.flush();
fos.close(); } else {
ZipArchiveEntry packinfo = zf.getEntry(zipname); String
filename = folder + File.separator + zipname;
FileOutputStream fos = new FileOutputStream(filename); InputStream
is = zf.getInputStream(packinfo);
IOUtils.copy(is, fos);
is.close();
fos.flush();
fos.close(); } }
zf.close(); |
解包后效果如下圖:
參考資料:
1、《Java打多重zip壓縮包 -- ByteArrayOutputStream結合org.apache.commons.compress來實現》
http://docs.google.com/View?id=ajfmzbdvh8wz_38ftxv59f6
2、Apache Commons Compress
http://commons.apache.org/compress/
3、本文地址
http://docs.google.com/View?id=ajfmzbdvh8wz_44cbjdbrfn