虚幻0516 发表于 2017-1-12 10:39:09

Java解压多重zip压缩包 -- org.apache.commons.compress.archivers.zip.ZipFile结合ZipArchiveI

Java解压多重zip压缩包
   -- org.apache.commons.compress.archivers.zip.ZipFile结合ZipArchiveInputStream来实现



针对前一篇文章《Java打多重zip压缩包--ByteArrayOutputStream结合org.apache.commons.compress来实现》打包后的zip文件如何解压的问题。
部分代码如下:



        File f = newFile("c:/test.zip");
        ZipFile zf = new ZipFile(f,"gbk");
        File folder = newFile("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")) {
                Stringinnerzip = StringUtils.removeEnd(zipname, ".zip");
                Fileinnerfolder = 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);
                Stringfilename = folder + File.separator + zipname;
               FileOutputStream fos = new FileOutputStream(filename);
                InputStreamis = zf.getInputStream(packinfo);
               IOUtils.copy(is, fos);
               is.close();
               fos.flush();
               fos.close();
            }
        }
       zf.close();



解包后效果如下图:
http://docs.google.com/File?id=ajfmzbdvh8wz_45cnbf2tg2_b
 
参考资料:
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
页: [1]
查看完整版本: Java解压多重zip压缩包 -- org.apache.commons.compress.archivers.zip.ZipFile结合ZipArchiveI