posts - 64,  comments - 9,  trackbacks - 0
          作者:曾巧(numenzq)

              最近做的一個項目需要用Java程序讀寫Zip文件,迫于找不到好的工具類來處理,也只好用java.util.zip包提供的類來實現Zip文件的壓縮和解壓操作了,在這之前你需要了解以下幾個基本概念:

          • ZipEntry:This class is used to represent a ZIP file entry.
          • ZipFile:This class is used to read entries from a zip file.
          • ZipInputStream:This class implements an input stream filter for reading files in the ZIP file format.
          • ZipOutputStream:This class implements an output stream filter for writing files in the ZIP file format.

          現在我們了解一下讀寫Zip文件的基本流程。當解壓時,從該Zip文件輸入流中讀取出ZipEntry,然后根據ZipEntry的信息,讀取對應文件的相應字節。代碼實現如下:

           

          publicsynchronizedstatic Map<String, byte[]> unZip(InputStream is)

                     throws IOException {

                 Map<String, byte[]> result = new HashMap<String, byte[]>();

                

                 byte[] buf;

                 ZipInputStream zis = new ZipInputStream(is);

                 ZipEntry zipEntry = zis.getNextEntry();

                 while (zipEntry != null) {

                     if (zipEntry.isDirectory()) {

                        zipEntry = zis.getNextEntry();

                        continue;

                     } else {

                        buf = newbyte[(int) zipEntry.getSize()];

                        zis.read(buf, 0, (int) zipEntry.getSize());

                         result.put(zipEntry.getName(), buf);

                        zipEntry = zis.getNextEntry();

                     }

                 }

                 return result;

          }

          壓縮操作與解壓操作差不多,先將文件字節流組裝成ZipEntry,然后把ZipEntry加入到輸出流中即可。代碼實現如下:

          publicsynchronizedstaticByteArrayOutputStream zip(Map<String, byte[]> map)

                     throws IOException {

                 ByteArrayOutputStream baos = new ByteArrayOutputStream();

                 ZipOutputStream zos = new ZipOutputStream(baos);

                 ZipEntry zipEntry;

                 for (String key : map.keySet()) {

                     zipEntry = new ZipEntry(key);

                     zipEntry.setSize(map.get(key).length);

                     zipEntry.setTime(System.currentTimeMillis());

                     zos.putNextEntry(zipEntry);

                     zos.write(map.get(key));

                     zos.flush();

                 }

                 zos.close();

                 return baos;

              }

             

              至此,使用上面的兩個方法就能完成基本的Zip文件壓縮和解壓縮處理了;該方法只適合處理Zip格式的文件,對于GZip格式的文件,我相信你也能輕松搞定了:)。

          posted on 2009-12-09 09:50 super_nini 閱讀(867) 評論(0)  編輯  收藏

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


          網站導航:
           
          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿

          隨筆檔案

          文章檔案

          相冊

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 永胜县| 伊宁县| 恩平市| 河曲县| 伊吾县| 富平县| 永济市| 东安县| 伊春市| 明光市| 沙坪坝区| 陈巴尔虎旗| 台南县| 中宁县| 饶阳县| 张家川| 读书| 中西区| 尼玛县| 江安县| 卓尼县| 新宁县| 望城县| 林口县| 镇安县| 遂平县| 竹北市| 蕲春县| 和田市| 龙岩市| 福海县| 阜阳市| 桃园县| 交口县| 上蔡县| 灵川县| 华蓥市| 富顺县| 城步| 丰城市| 尤溪县|