隨筆-46  評論-54  文章-0  trackbacks-0

          Java解壓多重zip壓縮包

              -- org.apache.commons.compress.archivers.zip.ZipFile結合ZipArchiveInputStream來實現

          針對前一篇文章Javazip-- ByteArrayOutputStreamorg.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



          2Apache Commons Compress

          http://commons.apache.org/compress/



          3、本文地址

          http://docs.google.com/View?id=ajfmzbdvh8wz_44cbjdbrfn







           

          posted on 2009-07-28 19:02 rox 閱讀(6667) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 柳江县| 双辽市| 汝州市| 阳江市| 平阴县| 大邑县| 定襄县| 得荣县| 荥经县| 黎平县| 金昌市| 昂仁县| 隆昌县| 应城市| 沙洋县| 郸城县| 通州市| 滨海县| 拜泉县| 甘肃省| 方城县| 蛟河市| 泾川县| 高安市| 体育| 夏津县| 兴隆县| 九龙县| 溧水县| 于田县| 含山县| 云南省| 北京市| 永州市| 长顺县| 若羌县| 迭部县| 榆社县| 盘山县| 凤城市| 大田县|