狂風日誌

人生就是應該嚐盡酸甜苦辣

Java: ZIP 壓縮檔的探索

ZIP 壓縮格式於1989年由Phil Katz設計。

支援的壓縮方式多元,包含未經壓縮的stored,最常用的deflate, 7z使用的lzma等。

此格式雖然壓縮率沒有RAR或是7-zip來的高,由於Winzip廣泛地被使用以及Windows ME之後系統支援, 現在為個平台主流的壓縮格式。

解法

ZipTest.java: list the contents of a zip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class ZipTest {
    public void list(String file) {

        try {
          /* the default file is test.zip */
          if (file == null) {
              file = "test.zip";
          }
            ZipFile zipFile = new ZipFile(file);
            Enumeration zipEntries = zipFile.entries();

            while (zipEntries.hasMoreElements())
                System.out.println(((ZipEntry)zipEntries.nextElement()).getName());

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String[] args) {
      String file = null;
      /* use the first parameter as the input zip file */
      if (args.length > 0)
          file = args[0];
        new ZipTest().list(file);
    }
}

ZipFile 類別是用來讀取每個壓縮項目的(ZipEntry),而透過entries()這個方法可以獲得所有項目的列舉(enumeration)。

透過ZipEntry的列舉,我們可以利用ZipEntry的getName()方法來列出Zip壓縮檔裡面的內容物。


注意事項

以下使用的java.util.zip 套件只適用於deflate的壓縮格式。


參考資料

Wikipedia

Javadb.com

docs.oracle.com