Java知多少(73)檔案的壓縮處理

來源:互聯網
上載者:User

標籤:

Java.util.zip 包中提供了可對檔案的壓縮和解壓縮進行處理的類,它們繼承自位元組流類OutputSteam 和 InputStream。其中 GZIPOutputStream 和 ZipOutputStream 可分別把資料壓縮成 GZIP 和 Zip 格式,GZIPInpputStream 和 ZipInputStream 又可將壓縮的資料進行還原。

將檔案寫入壓縮檔的一般步驟如下:

  1. 產生和所要產生的壓縮檔相關聯的壓縮類對象。
  2. 壓縮檔通常不只包含一個檔案,將每個要加入的檔案稱為一個壓縮入口,使用ZipEntry(String FileName)產生壓縮入口對象。
  3. 使用 putNextEntry(ZipEntry entry)將壓縮入口加入壓縮檔。
  4. 將檔案內容寫入此壓縮檔。
  5. 使用 closeEntry()結束目前的壓縮入口,繼續下一個壓縮入口。


將檔案從壓縮檔中讀出的一般步驟如下:

  1. 產生和所要讀入的壓縮檔相關聯的壓縮類對象。
  2. 利用 getNextEntry()得到下一個壓縮入口。

 

 1 【例 10-13】輸入若干檔案名稱,將所有檔案壓縮為“ep10_13.zip”,再從壓縮檔中解壓並顯示。 2 //********** ep10_13.java ********** 3 import java.io.*; 4 import java.util.*; 5 import java.util.zip.*; 6 class ep10_13{ 7     public static void main(String args[]) throws IOException{ 8         FileOutputStream a=new FileOutputStream("ep10_13.zip"); 9         //處理壓縮檔10         ZipOutputStream out=new ZipOutputStream(new BufferedOutputStream(a));11         for(int i=0;i<args.length;i++){  //對命令列輸入的每個檔案進行處理12             System.out.println("Writing file"+args[i]);13             BufferedInputStream in=new BufferedInputStream(new FileInputStream(args[i]));14             out.putNextEntry(new ZipEntry(args[i]));  //設定 ZipEntry 對象15             int b;16             while((b=in.read())!=-1)17                 out.write(b);  //從源檔案讀出,往壓縮檔中寫入18             in.close();19         }20         out.close();21         //解壓縮檔案並顯示22         System.out.println("Reading file");23         FileInputStream d=new FileInputStream("ep10_13.zip");24         ZipInputStream  inout=new  ZipInputStream(new BufferedInputStream(d));25         ZipEntry z;26 27         while((z=inout.getNextEntry())!=null){  //獲得入口28             System.out.println("Reading file"+z.getName());  //顯示檔案初始名29             int x;30             while((x=inout.read())!=-1)31                 System.out.write(x);32             System.out.println();33         }34         inout.close();35     }36 }

 


例 10-13 運行後,在程式目錄建立一個 ep10_13.zip 的壓縮檔,使用解壓縮軟體(如 WinRAR等),可以將其開啟。命令提示字元下,程式運行結果 10-12 所示:


圖 10-12  例 10_13 運行結果 系列文章:Java知多少(上)Java知多少(39)interface介面Java知多少(40)介面和抽象類別的區別Java知多少(41)泛型詳解Java知多少(42)泛型萬用字元和型別參數的範圍Java知多少(43)異常處理基礎Java知多少(44)異常類型Java知多少(45)未被捕獲的異常Java知多少(46)try和catch的使用Java知多少(47)多重catch語句的使用Java知多少(48)try語句的嵌套Java知多少(49)throw:異常的拋出Java知多少(50)Java throws子句Java知多少(51)finallyJava知多少(52)內建異常Java知多少(53)使用Java建立自己的異常子類Java知多少(54)斷言詳解Java知多少(55)線程Java知多少(56)執行緒模式Java知多少(57)主線程Java知多少(58)線程Runnable介面和Thread類詳解Java知多少(59)建立多線程Java知多少(60)isAlive()和join()的使用Java知多少(61)線程優先順序Java知多少(62)線程同步Java知多少(63)線程間通訊Java知多少(64)線程死結Java知多少(65)線程的掛起、恢複和終止Java知多少(66)輸入輸出(IO)和流的概述Java知多少(67)面向字元的輸入資料流Java知多少(68)面向字元的輸出資料流Java知多少(69)面向位元組的輸入輸出資料流Java知多少(70)面向位元組流的應用Java知多少(71)檔案與目錄管理Java知多少(72)檔案的隨機讀寫

Java知多少(73)檔案的壓縮處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.