Java文件壓縮的處理方式——項目開發實戰篇
一、 概述:
以Java項目開發實戰的角度對文件壓縮與解壓縮技術進行分析,從應用場景、實戰場景和案例分析等方面逐步展開說明。需要注意的是自媒體、流媒體或視頻類門戶網站對該技術的關注點在於壓縮率、壓縮和解壓縮速度、算法迭代和優化等等方面;一般大中型企業數據管理平臺的關注點則是壓縮文件格式與平臺系統環境的匹配度,即使用系統默認的壓縮文件格式,無需單獨安裝壓縮工具。因為不同的系統對於軟件的安裝要求不一致,導致部分軟件不能正常安裝。例如:Solaris和UNIX早期版本,還包括32位和64位系統的差異。
本文以壓縮文件格式的視角逐步展開說明,避開那些專業度較高的層面,可以達到快速入門和理解的目的。後期會單獨針對各種不同實現技術的性能進行分析說明。
二、 項目中的應用場景:
1、 附件文件批量下載並壓縮;
2、 日誌文件壓縮;
3、 廠商接口數據文件壓縮與解壓縮;
4、 經FTP方式傳遞的各種文件;
三、 項目中的缺省情況處理:
1、 壓縮文件時未設置新生成文件的路徑:
a) 壓縮單個文件使用文件名稱進行命名(去除文件格式後綴的純文件名稱);
b) 壓縮多個文件:屬於同一個文件夾使用文件夾名稱進行命名,否則使用第一個文件的名稱或父文件夾名稱進行命名;
c) 壓縮文件夾時與文件處理一致;
2、 解壓縮文件時未設置輸出文件的路徑:
a) 在解壓縮文件同級直接解壓縮;
b) 在解壓縮文件同級生成同名文件夾後,在進行解壓縮;
四、 項目中常用的壓縮格式:
1、 zip;
2、 rar;
3、 tar;
4、 tar.gz;
5、 7z;
五、 項目中常用的壓縮技術:
1、 zip:
a) JDK自帶API:
自帶的java.util.zip.ZipEntry(路徑中帶有中文的情況不能解析);
b) 示例代碼:

ZipUtil
c) ant.jar:
org.apache.tools.zip.ZipEntry可以有效的解決中文路徑亂碼問題,通過org.apache.tools.zip.提供的setEncoding( encoding)方法進行字符編碼設置。
d) 示例代碼:

AntZipUtil
2、 rar:
a) 說明:
java-unrar-0.3.jar中的
de.innosystec.unrar.Archive;
由於RAR未開放壓縮算法,因此只能通過Java代碼進行解壓縮操作。
b) 示例代碼:
RarUtil
3、 tar:
a) 說明:
commons-compress.jar中的
org.apache.commons.compress.archivers.tar.TarArchiveEntry;
在使用TarArchiveEntry對象調用setName( name)方法時,先將文件名稱進行編碼格式轉換處理。
b) 示例代碼:
TarUtil
4、 tar.gz:
a) 說明:
commons-compress.jar中的
org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream和
org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
只能針對TAR文件進行再次壓縮。
b) 示例代碼:
GZipUtil
5、 7z:
a) 說明:
commons-compress.jar中的
org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
在使用SevenZOutputFile對象調用createArchiveEntry( inputFile, entryName)方法時,先將文件名稱進行編碼格式轉換處理。
b) 示例代碼:
SevenZUtil
六、 案例分析:
1、 類圖:
PowerDesigner類圖
2、 Spring配置:
Spring配置
3、 說明:
使用接口將對象整合,以便在注入時可以使用同一個對象實例化。
4、 優化:
a) 優化思路:
根據實際調用頻率,可以通過單例模式的方法優化對象實例化過程。
b) 具體操作:
i. 增加將類對象定義為該類的私有靜態成員變量;
ii. 增加getInstance方法進行實例化操作;
iii. 增加closed方法進行對象置空操作;
iv. 修改Spring配置;
c) 示例代碼:
ZipUtil單例
Spring配置優化後