官术网_书友最值得收藏!

2.3.3 ZIP文檔

ZIP文檔(通常)以壓縮格式存儲了一個或多個文件,每個ZIP文檔都有一個頭,包含諸如每個文件名字和所使用的壓縮方法等信息。在Java中,可以使用ZipInputStream來讀入ZIP文檔。你可能需要瀏覽文檔中每個單獨的項,getNextEntry方法就可以返回一個描述這些項的ZipEntry類型的對象。向ZipInputStream的getInputStream方法傳遞該項可以獲取用于讀取該項的輸入流。然后調(diào)用closeEntry來讀入下一項。下面是典型的通讀ZIP文件的代碼序列:

要寫出到ZIP文件,可以使用ZipOutputStream,而對于你希望放入到ZIP文件中的每一項,都應(yīng)該創(chuàng)建一個ZipEntry對象,并將文件名傳遞給ZipEntry的構(gòu)造器,它將設(shè)置其他諸如文件日期和解壓縮方法等參數(shù)。如果需要,你可以覆蓋這些設(shè)置。然后,你需要調(diào)用ZipOutputStream的putNextEntry方法來開始寫出新文件,并將文件數(shù)據(jù)發(fā)送到ZIP輸出流中。當(dāng)完成時,需要調(diào)用closeEntry。然后,你需要對所有你希望存儲的文件都重復(fù)這個過程。下面是代碼框架:

注意:JAR文件(在卷Ⅰ第13章中討論過)只是帶有一個特殊項的ZIP文件,這個項稱作清單。你可以使用JarInputStream和JarOutputStream類來讀寫清單項。

ZIP輸入流是一個能夠展示流的抽象化的強大之處的實例。當(dāng)你讀入以壓縮格式存儲的數(shù)據(jù)時,不必擔(dān)心邊請求邊解壓數(shù)據(jù)的問題,而且ZIP格式的字節(jié)源并非必須是文件,也可以是來自網(wǎng)絡(luò)連接的ZIP數(shù)據(jù)。事實上,當(dāng)Applet的類加載器讀入JAR文件時,它就是在讀入和解壓來自網(wǎng)絡(luò)的數(shù)據(jù)。

注意:2.5.8節(jié)將展示如何使用Java SE7的FileSystem類而無需特殊API來訪問ZIP文檔。

java.util.zip.ZipInputStream 1.1

·ZipInputStream(InputStream in)

創(chuàng)建一個ZipInputStream,使得我們可以從給定的InputStream向其中填充數(shù)據(jù)。

·ZipEntry getNextEntry()

為下一項返回ZipEntry對象,或者在沒有更多的項時返回null。

·void closeEntry()

關(guān)閉這個ZIP文件中當(dāng)前打開的項。之后可以通過使用getNextEntry()讀入下一項。

java.util.zip.ZipOutputStream 1.1

·ZipOutputStream(OutputStream out)

創(chuàng)建一個將壓縮數(shù)據(jù)寫出到指定的OutputStream的ZipOutputStream。

·void putNextEntry(ZipEntry ze)

將給定的ZipEntry中的信息寫出到輸出流中,并定位用于寫出數(shù)據(jù)的流,然后這些數(shù)據(jù)可以通過write()寫出到這個輸出流中。

·void closeEntry()

關(guān)閉這個ZIP文件中當(dāng)前打開的項。使用putNextEntry方法可以開始下一項。

void setLevel(int level)

設(shè)置后續(xù)的各個DEFLATED項的默認壓縮級別。這里默認值是Deflater.DEFAULT_COMPRESSION。如果級別無效,則拋出IllegalArgumentException。

參數(shù):level 壓縮級別,從0(NO_COMPRESSION)到9(BEST_COMPRESSION)

void setMethod(int method)

設(shè)置用于這個ZipOutputStream的默認壓縮方法,這個壓縮方法會作用于所有沒有指定壓縮方法的項上。

參數(shù):method 壓縮方法,DEFLATED或STORED

java.util.zip.ZipEntry 1.1

·ZipEntry(String name)

用給定的名字構(gòu)建一個Zip項。

參數(shù):name 這一項的名字

·long getCrc()

返回用于這個ZipEntry的CRC32校驗和的值。

·String getName()

返回這一項的名字。

·long getSize()

返回這一項未壓縮的尺寸,或者在未壓縮的尺寸不可知的情況下返回-1。

·boolean isDirectory()

當(dāng)這一項是目錄時返回true。

·void setMethod(int method)

參數(shù):method 用于這一項的壓縮方法,必須是DEFLATED或STORED

·void setSize(long size)

設(shè)置這一項的尺寸,只有在壓縮方法是STORED時才是必需的。

參數(shù):size 這一項未壓縮的尺寸

·void setCrc(long crc)

給這一項設(shè)置CRC32校驗和,這個校驗和是使用CRC32類計算的。只有在壓縮方法是STORED時才是必需的。

參數(shù):crc 這一項的校驗和

java.util.zip.ZipFile 1.1

·ZipFile(String name)

·ZipFile(File file)

創(chuàng)建一個ZipFile,用于從給定的字符串或File對象中讀入數(shù)據(jù)。

·Enumeration entries()

返回一個Enumeration對象,它枚舉了描述這個ZipFile中各個項的ZipEntry對象。

·ZipEntry getEntry(String name)

返回給定名字所對應(yīng)的項,或者在沒有對應(yīng)項的時候返回null。

參數(shù):name 項名

·InputStream getInputStream(ZipEntry ze)

返回用于給定項的InputStream。

參數(shù):ze 這個ZIP文件中的一個ZipEntry

·String getName()

返回這個ZIP文件的路徑。

主站蜘蛛池模板: 临夏县| 昌邑市| 宣恩县| 灌阳县| 印江| 金寨县| 鹤壁市| 冷水江市| 阿坝| 体育| 泽州县| 台北县| 怀集县| 正蓝旗| 西安市| 英德市| 板桥市| 双峰县| 调兵山市| 陇南市| 新沂市| 达州市| 漳浦县| 子长县| 正蓝旗| 嘉祥县| 武清区| 韶关市| 新疆| 南投县| 金溪县| 始兴县| 清水县| 朔州市| 延吉市| 崇明县| 山阴县| 新宾| 枣强县| 绥滨县| 普兰店市|