1. 程式人生 > >Java實現檔案壓縮與解壓

Java實現檔案壓縮與解壓

Java實現ZIP的解壓與壓縮功能基本都是使用了Java的多肽和遞迴技術,可以對單個檔案和任意級聯資料夾進行壓縮和解壓,對於一些初學者來說是個很不錯的例項。

zip扮演著歸檔和壓縮兩個角色;gzip並不將檔案歸檔,僅只是對單個檔案進行壓縮,所以,在UNIX平臺上,命令tar通常用來建立一個檔案檔案,然後命令gzip來將檔案檔案壓縮。

Java I/O類庫還收錄了一些能讀寫壓縮格式流的類。要想提供壓縮功能,只要把它們包在已有的I/O類的外面就行了。這些類不是Reader和Writer,而是InputStream和OutStreamput的子類。這是因為壓縮演算法是針對byte而不是字元的。

相關類與介面:

Checksum 介面:被類Adler32和CRC32實現的介面

Adler32 :使用Alder32演算法來計算Checksum數目

CRC32 :使用CRC32演算法來計算Checksum數目

CheckedInputStream :InputStream派生類,可得到輸入流的校驗和Checksum,用於校驗資料的完整性

CheckedOutputStream :OutputStream派生類,可得到輸出流的校驗和Checksum, 用於校驗資料的完整性

DeflaterOutputStream :壓縮類的基類。

ZipOutputStream :DeflaterOutputStream的一個子類,把資料壓縮成Zip檔案格式。

GZIPOutputStream :DeflaterOutputStream的一個子類,把資料壓縮成GZip檔案格式

InflaterInputStream :解壓縮類的基類

ZipInputStream :InflaterInputStream的一個子類,能解壓縮Zip格式的資料

GZIPInputStream :InflaterInputStream的一個子類,能解壓縮Zip格式的資料

ZipEntry 類:表示 ZIP 檔案條目

ZipFile 類:此類用於從 ZIP 檔案讀取條目

使用ZIP對多個檔案進行壓縮與解壓

Java對Zip格式類庫支援得比較全面,得用它可以把多個檔案壓縮成一個壓縮包。這個類庫使用的是標準Zip格式,所以能與很多的壓縮工具相容。

ZipOutputStream類有設定壓縮方法以及在壓縮方式下使用的壓縮級別,zipOutputStream.setMethod(int method)設定用於條目的預設壓縮方法。只要沒有為單個 ZIP 檔案條目指定壓縮方法,就使用ZipOutputStream所設定的壓縮方法來儲存,預設值為 ZipOutputStream.DEFLATED(表示進行壓縮儲存),還可以設定成STORED(表示僅打包歸檔儲存)。ZipOutputStream在設定了壓縮方法為DEFLATED後,我們還可以進一步使用setLevel(int level)方法來設定壓縮級別,壓縮級別值為0-9共10個級別(值越大,表示壓縮越利害),預設為Deflater.DEFAULT_COMPRESSION=-1。當然我們也可以通過條目ZipEntry的setMethod方法為單個條件設定壓縮方法。

類ZipEntry描述了儲存在ZIP檔案中的壓縮檔案。類中包含有多種方法可以用來設定和獲得ZIP條目的資訊。類ZipEntry是被ZipFile[zipFile.getInputStream(ZipEntry entry)]和ZipInputStream使用來讀取ZIP檔案,ZipOutputStream來寫入ZIP檔案的。有以下這些有用的方法:getName()返回條目名稱、isDirectory()如果為目錄條目,則返回 true(目錄條目定義為其名稱以 ‘/’ 結尾的條目)、setMethod(int method) 設定條目的壓縮方法,可以為 ZipOutputStream.STORED 或 ZipOutputStream .DEFLATED。

下面例項我們使用了apache的zip工具包(所在包為ant.jar ),因為java型別自帶的不支援中文路徑,不過兩者使用的方式是一樣的,只是apache壓縮工具多了設定編碼方式的介面,其他基本上是一樣的。另外,如果使用org.apache.tools.zip.ZipOutputStream來壓縮的話,我們只能使用org.apache.tools.zip.ZipEntry來解壓,而不能使用java.util.zip.ZipInputStream來解壓讀取了,當然apache並未提供ZipInputStream類。

檔案壓縮:

package gizAction; import java.io.*; import java.util.zip.*;/** * @author Dana·Li * <p> * 程式實現了ZIP壓縮[compression] * <p> * 大致功能包括用了多型,遞迴等JAVA核心技術,可以對單個檔案和任意級聯資料夾進行壓縮和解壓。  需在程式碼中自定義源輸入路徑和目標輸出路徑。 * <p> * 在本段程式碼中,實現的是壓縮部分 */public class ZipCompressing {    private int k = 1// 定義遞迴次數變數 private void zip(String zipFileName, File inputFile) throws Exception { System.out.println("壓縮中..."); ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName)); BufferedOutputStream bo = new BufferedOutputStream(out); zip(out, inputFile, inputFile.getName(), bo); bo.close();        out.close(); // 輸出流關閉 System.out.println("壓縮完成"); }    private void zip(ZipOutputStream out, File f, String base, BufferedOutputStream bo) throws Exception { // 方法過載 if (f.isDirectory()){ File[] fl = f.listFiles();            if (fl.length == 0){                out.putNextEntry(new ZipEntry(base + "/")); // 建立zip壓縮排入點base System.out.println(base + "/"); }            for 

相關推薦

Java實現檔案壓縮

Java實現ZIP的解壓與壓縮功能基本都是使用了Java的多肽和遞迴技術,可以對單個檔案和任意級聯資料夾進行壓縮和解壓,對於一些初學者來說是個很不錯的例項。 zip扮演著歸檔和壓縮兩個角色;gzip並不將檔案歸檔,僅只是對單個檔案進行壓縮,所以,在UNIX平

用Huffman樹實現檔案壓縮

用Huffman樹實現檔案的壓縮與解壓 我們先來了解一下什麼是Huffman樹? 我們平常所使用的Zip等壓縮工具都是藉助Huffman樹實現的,Huffman是一種特殊的二叉樹,它是一種加權路徑最短的二叉樹, 因此也稱為最優二叉樹。 (下面用一

Java實現Zip壓縮(解決中文亂碼問題)

解決中文壓縮與解壓問題  使用的是org.apache.tools.zip包下面的相關類  下面是自己寫的類,可以設定和獲取Zip檔案的註釋資訊  Java程式碼   [java] view plaincopyprint? import java

C++中的位移操作以實現檔案壓縮實現哈夫曼對檔案壓縮時做的一個小測試)

因為以前基本上沒用過位移操作,所以這裡做了一個小測試,加深了一下對位移的理解 相關概念:        因為C++中對檔案的操作常用的就是按位元組來進行讀取。下面對檔案的讀寫進行舉例(這是我常用的方式,大家也可以用其它方法讀取):   首先包含相關標頭檔案:     

liunx系統中的檔案壓縮

zip格式 壓縮: zip -r [目標檔名].zip [原檔案/目錄名] 解壓: unzip [原檔名].zip 注:-r引數代表遞迴 tar格式(該格式僅僅打包,不壓縮) 打包:tar -cvf [目標檔名].tar [原檔名/目錄名] 解包:tar -xvf [原檔名]

shell命令之檔案壓縮(常用)

.tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是壓縮!) .gz 解壓1:gunzip FileName.gz 解壓2:gzip -d Fil

linux 檔案壓縮

檔案壓縮與解壓檔案的壓縮與解壓,也是我們日常中經常用到的操作,如,我們會經常從網上下載各種檔案進行進行安裝,而大部分檔案都是經過壓縮的。下面來學習四個常用的壓縮命令。gzip特點:1.只能壓縮檔案,不能壓縮目錄2.不保留原始檔[[email protected] t

Linux檔案壓縮命令

 對許多使用者來說,在DOS和Windows環境下利用工具軟體ARJ、Winzip等,壓縮或解壓檔案是比較容易的事。但是,在Linux中如何對檔案進行壓縮與解壓呢?本文基於Red Hat 6.0,介紹了

Linux檔案壓縮

壓縮解壓檔案很常用,經常會忘記。最好的方法是每次用的時候都去查一下,用多了相信就會熟悉了。列舉下面常用的壓縮和解壓命令,以備查詢: 1.幾種壓縮檔案格式 *.z:compress 程式壓縮的檔案。 *.bz2:bzip2程式壓縮的檔案。 *.gz:gzip程式壓縮的檔案。

java實現對zip、tar、gzip(gz)的壓縮

以下是一個工具類: import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream;

Java實現壓縮

import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io

基於哈夫曼壓縮演算法的壓縮實現Java

如果需要對一個檔案進行壓縮,第一步是提取出檔案中的內容資訊;第二步是對其中的字元等進行統計,獲得壓縮編碼;第三步是把壓縮編碼及解壓檔案需要的資訊存入一個檔案(或者生成新檔案並存入)。這樣對檔案的壓縮就完成了。 下面就是檔案的解壓,第一步還是讀入檔案,即從前面生

huffman演算法實現檔案壓縮

本文采用哈夫曼編碼的方式進行檔案的壓縮和解壓縮,主要原理是通過huffman編碼來表示字元,出現次數多的編碼短,出現次數少的編碼長,這樣整體而言,所需的總的bit位是減少的。但是當大部分字元出現的

java tar.gz 格式多檔案打包壓縮

問題背景:開發中,我們時常會遇到對檔案進行儲存或傳輸的問題,但如果傳輸儲存的檔案較大,浪費磁碟空間不說,還會大大影響程式執行效率。於是便引出了這篇文章的主題,關於檔案打包與壓縮的問題。這裡“打包”是指,將多個檔案合成一個檔案;“壓縮”是指,把檔案的二進位制程式碼

1078 字串壓縮 ——C++實現

題目 1078 字串壓縮與解壓 (20 分) 文字壓縮有很多種方法,這裡我們只考慮最簡單的一種:把由相同字元組成的一個連續的片段用這個字元和片段中含有這個字元的個數來表示。例如 ccccc 就用 5c 來表示。如果字元沒有重複,就原樣輸出。例如 aba 壓縮後仍然是 aba。

大資料Linux命令之檔案檢視大小、系統情況命令、壓縮

一、實時檢視檔案內容 Linux 中有一個tail命令,常用來顯示一個檔案的最後n行文件內容 但更多情況下,我們要在伺服器端執行程式,並且需要實時監控執行日誌,這時候有什麼辦法實時滾動顯示log檔案內容? 這裡可以利用tail命令加引數f實現:tail用於顯示指

java壓縮/壓縮/加密壓縮/加密壓縮 ZIP4J ZIP檔案壓縮壓縮學習

                最近公司準備讓各專案組提供公共工具元件,手中正好無事便研究其中一個工具 - 檔案壓縮與解壓縮工具。           目前JAVA API已提供對於ZIP檔案的壓縮與解壓縮,但網上總結不支援ZIP檔案加密與解密甚至對於中文支援也有問題,於是果斷找其他的支援加密解密的第三方包。

ubuntu之壓縮檔案

ubuntu之壓縮與解壓檔案 安裝壓縮工具 sudo apt-get install rar 安裝解壓工具 sudo apt-get install unrar .tar 解包: tar xvf xxx.tar 打包: tar cvf xxx.tar dirname

Linux:03---Terminal高階命令(檔案壓縮):gzip、bzip2、tar

提示: gzip、bzip2:只能用於單個檔案的壓縮與解壓,不能壓縮或者解壓目錄 tar可用於多個檔案的壓縮與解壓 一般情況下:小檔案的壓縮用gzip,大檔案的壓縮用bzip2 一、gzip 1.概念:對字尾為.gz的檔案進行壓縮或者解壓  

【C/C++】C實現gzip格式的壓縮Demo

參考連結:  http://www.codeproject.com/Questions/341319/C-Decompress-Gzipped-http-response http://www.cppblog.com/woaidongmao/archive/2011/06/