Java ZIP壓縮輸入輸出流
阿新 • • 發佈:2019-01-29
ZIP是一種較為常見的壓縮形式,在Java中要想實現ZIP的壓縮需要匯入java.util.zip包,可以使用此包中的ZipFile、ZipOutputStream、ZipInputStream、ZipEntry幾個類完成。
ZipOutputStream類的常用方法
ZipInputStream類的常用方法
在JAVA IO中,不僅可以實現ZIP壓縮格式的輸入、輸出,也可以實現JAR及GZIP檔案格式的壓縮:
1、JAR壓縮的支援類儲存在java.util.jar包中,常用的類有 JarOutputStream(JAR壓縮輸出流)、JarInputStream(JAR壓縮輸入流)、JARFile(JAR檔案)、JAREntry(JAR實體)
2、GZIP是用於UNIX系統的檔案壓縮,在Linux中經常會使用到*.gz的檔案,就是GZIP格式,GZIP壓縮的支援類儲存在java.util.zip包中,常用的類有 GZIPOutputStream(GZIP壓縮輸出流)、GZIPInputStream(GZIP壓縮輸入流)
注意:
1、壓縮檔案中的每一個壓縮實體都使用ZipEntry儲存,一個壓縮檔案中可能包含一個或多個ZipEntry物件。
2、在JAVA中可以進行zip、jar、gz三種格式的壓縮支援,操作流程基本上是一致的。
3、ZipOutputStream可以進行壓縮的輸出,但是輸出的位置不一定是檔案。
4、ZipFile表示每一個壓縮檔案,可以得到每一個壓縮實體的輸入流。
壓縮檔案
import java.io.*; import java.util.zip.*; public class MyZip { // 建立類 private void zip(String zipFileName, File inputFile) throws Exception { ZipOutputStream out = new ZipOutputStream(new FileOutputStream( zipFileName)); // 建立ZipOutputStream類物件 zip(out, inputFile, ""); // 呼叫方法 System.out.println("壓縮中…"); // 輸出資訊 out.close(); // 將流關閉 } private void zip(ZipOutputStream out, File f, String base) throws Exception { // 方法過載 if (f.isDirectory()) { // 測試此抽象路徑名錶示的檔案是否是一個目錄 File[] fl = f.listFiles(); // 獲取路徑陣列 out.putNextEntry(new ZipEntry(base + "/")); // 寫入此目錄的entry base = base.length() == 0 ? "" : base + "/"; // 判斷引數是否為空 for (int i = 0; i < fl.length; i++) { // 迴圈遍歷陣列中檔案 zip(out, fl[i], base + fl[i]); } } else { out.putNextEntry(new ZipEntry(base)); // 建立新的進入點 // 建立FileInputStream物件 FileInputStream in = new FileInputStream(f); int b; // 定義int型變數 System.out.println(base); while ((b = in.read()) != -1) { // 如果沒有到達流的尾部 out.write(b); // 將位元組寫入當前ZIP條目 } in.close(); // 關閉流 } } public static void main(String[] temp) { // 主方法 MyZip book = new MyZip(); // 建立本例物件 try { // 呼叫方法,引數為壓縮後文件與要壓縮檔案 book.zip("hello.zip", new File("src")); System.out.println("壓縮完成"); // 輸出資訊 } catch (Exception ex) { ex.printStackTrace(); } } }
解壓檔案
import java.io.*;
import java.util.zip.*;
public class Decompressing { // 建立檔案
public static void main(String[] temp) {
ZipInputStream zin; // 建立ZipInputStream物件
try { // try語句捕獲可能發生的異常
zin = new ZipInputStream(new FileInputStream("hello.zip"));
// 例項化物件,指明要進行解壓的檔案
ZipEntry entry = zin.getNextEntry(); // 獲取下一個ZipEntry
while (((entry = zin.getNextEntry()) != null)
&& !entry.isDirectory()) {
// 如果entry不為空,並不在同一目錄下
File file = new File("d:\\" + entry.getName()); // 獲取檔案目錄
System.out.println(file);
if (!file.exists()) { // 如果該檔案不存在
file.mkdirs();// 建立檔案所在資料夾
file.createNewFile(); // 建立檔案
}
zin.closeEntry(); // 關閉當前entry
System.out.println(entry.getName() + "解壓成功");
}
zin.close(); // 關閉流
} catch (Exception e) {
e.printStackTrace();
}
}
}