1. 程式人生 > >java 解zip檔案(ZipFile)

java 解zip檔案(ZipFile)

2.類ZipInputStream讀出ZIP檔案序列(簡單地說就是讀出這個ZIP檔案壓縮了多少檔案),而類ZipFile使用內嵌的隨機檔案訪問機制讀出其中的檔案內容,所以不必順序的讀出ZIP壓縮檔案序列。

注意:ZIPInputStream和ZipFile之間另外一個基本的不同點在於高速緩衝的使用方面。當檔案使用ZipInputStream和FileInputStream流讀出的時候,ZIP條目不使用高速緩衝。然而,如果使用ZipFile(檔名)來開啟檔案,它將使用內嵌的高速緩衝,所以如果ZipFile(檔名)被重複呼叫的話,檔案只被開啟一次。緩衝值在第二次開啟進使用。如果你工作在UNIX系統下,這是什麼作用都沒有的,因為使用ZipFile開啟的所有ZIP檔案都在記憶體中存在對映,所以使用ZipFile的效能優於ZipInputStream。然而,如果同一ZIP檔案的內容在程式執行期間經常改變,或是過載的話,使用ZipInputStream就成為你的首選了。

package zip;

import java.io.*;
import java.util.*;
import java.util.zip.*;
public class UnZip2 {
static final int BUFFER = 2048;
public static void main(String argv[]) {
try {
BufferedOutputStream dest = null;
BufferedInputStream is = null;
ZipEntry entry;
ZipFile zipfile = new ZipFile("D:/project/test/down/down.zip");
Enumeration e = zipfile.entries();
while (e.hasMoreElements()) {
entry = (ZipEntry) e.nextElement();
System.out.println("Extracting: " + entry);
is = new BufferedInputStream
(zipfile.getInputStream(entry));
int count;
byte data[] = new byte[BUFFER];
FileOutputStream fos = new
FileOutputStream("D:/project/test/unzip/"+entry.getName());
dest = new
BufferedOutputStream(fos, BUFFER);
while ((count = is.read(data, 0, BUFFER))
!= -1) {
dest.write(data, 0, count);
}
dest.flush();
dest.close();
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}