- Java核心技術(shù)·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 1301字
- 2020-10-30 18:10:40
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文件的路徑。
- BeagleBone Media Center
- Building Mobile Applications Using Kendo UI Mobile and ASP.NET Web API
- 精通Scrapy網(wǎng)絡(luò)爬蟲
- C語言程序設(shè)計實踐教程
- Full-Stack React Projects
- 利用Python進行數(shù)據(jù)分析(原書第3版)
- Access 2010數(shù)據(jù)庫應(yīng)用技術(shù)(第2版)
- Java語言程序設(shè)計教程
- 時空數(shù)據(jù)建模及其應(yīng)用
- 軟件測試綜合技術(shù)
- Webpack實戰(zhàn):入門、進階與調(diào)優(yōu)(第2版)
- Mastering Elixir
- SQL Server 入門很輕松(微課超值版)
- Ext JS 4 Plugin and Extension Development
- Learning Concurrency in Python