前言
一個多月前,因項目需要對Java語言下的zip格式壓縮文件的處理作了一些了解,嘗試了多種開源項目並寫了幾篇博客做記錄:
http://www.linuxidc.com/Linux/2014-11/109059.htm
http://www.linuxidc.com/Linux/2014-11/109057.htm
http://www.linuxidc.com/Linux/2014-11/109058.htm
ZIP4J,作為解決了我的問題的終極解決方案,本來一開始在搜索引擎上就看到了它的蹤跡,但因天朝的網絡環境問題,zip4j的官網一直無法訪問,最終使我多走了好多冤枉路,期間試過JDK的zip包,試過Apache的zip解決方案,也試過如winzipaes等其它的開源框架,最終沒有滿足自己的需求,最後,我不得已掛了一下代理將zip4j下載了下來,試用了一下,果然威力無比,所到之處所向披靡...
閒話少說,如果需要可以到zip4j的官網下載該開源項目:http://www.lingala.net/zip4j/
不過需要提醒的是可能無法直接訪問,如果無法正常訪問,請自行准備代理訪問,如果各位嫌麻煩,可以到這裡下載:
------------------------------------------分割線------------------------------------------
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2014年資料/11月/6日/zip4j -- Java處理zip壓縮文件的完整解決方案
下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm
------------------------------------------分割線------------------------------------------
這是我的CSDN資源鏈接,下載需要3分,您如果分數不多,可以留言索取,呵呵...我也需要積分,請諒解!
官網上下載的資源好像是不帶API幫助文檔的,我利用其源碼生成了一份,也一並打在我的資源文件中,希望能幫到大家。
ZIP4J的官方說明
(自己翻譯了一下,英文不好,呵呵...)
Key features(主要特性):
Create, Add, Extract, Update, Remove files from a Zip file
針對ZIP壓縮文件創建、添加、抽出、更新和移除文件
Read/Write password protected Zip files
(讀寫有密碼保護的Zip文件)
Supports AES 128/256 Encryption
(支持AES 128/256算法加密)
Supports Standard Zip Encryption
(支持標准Zip算法加密)
Supports Zip64 format
(支持zip64格式)
Supports Store (No Compression) and Deflate compression method
(支持Store(非壓縮)和Deflate壓縮方法---不太明白)
Create or extract files from Split Zip files (Ex: z01, z02,...zip)
(針對分塊zip文件創建和抽出文件)
Supports Unicode file names
(支持Unicode編碼文件名)
Progress Monitor
(進度監控)
從上面的主要特性可以看出,zip4j的功能是非常強大的,完全可以利用其寫個類似於好壓的zip文件管理軟件,但我們用地最多的可能還是利用其作一些簡單的解壓和壓縮操作,其它的功能極少觸碰,我也一樣,呵呵...
使用注意點
zip4j默認采用UTF-8編碼,所以它支持中文,同時也支持密碼,而且支持多種壓縮算法,可以說功能強大,但使用起來卻非常簡單,當然,如果需求比較復雜,那就得好好去研究了。如果你僅僅是簡單地解壓一個zip壓縮文件,那麼只需要簡單地幾步即可:
public static void unzip(File zipFile, String dest, String passwd) throws ZipException {
ZipFile zFile = new ZipFile(zipFile); // 首先創建ZipFile指向磁盤上的.zip文件
zFile.setFileNameCharset("GBK"); // 設置文件名編碼,在GBK系統中需要設置
if (!zFile.isValidZipFile()) { // 驗證.zip文件是否合法,包括文件是否存在、是否為zip文件、是否被損壞等
throw new ZipException("壓縮文件不合法,可能被損壞.");
}
File destDir = new File(dest); // 解壓目錄
if (destDir.isDirectory() && !destDir.exists()) {
destDir.mkdir();
}
if (zFile.isEncrypted()) {
zFile.setPassword(passwd.toCharArray()); // 設置密碼
}
zFile.extractAll(dest); // 將文件抽出到解壓目錄(解壓)
}
當然將指定文件壓縮成zip文件也是非常簡單的事,此處不再貼代碼,如有需要請參看下面的完整示例。
提示:如果將要解壓的壓縮文件中的文件名含有中文,解壓時需要注意一點,就是設置文件名字符集方法
zFile.setFileNameCharset("GBK");
這個方法的調用一定要靠前,要靠多前呢?其實最好在創建ZipFile之後就設置上,至少要在
zFile.isValidZipFile()
這個方法調用之前調用,我在應用時因為這個問題耽誤好久,最後查看源碼才弄明白,好像是ZipFile在驗證方法中就將編碼設置好,以後就不再對文件名編碼作改變了。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-11/109061p2.htm