【JAVA IO】_壓縮流筆記

來源:互聯網
上載者:User

【JAVA IO】_壓縮流筆記

本章目標:
瞭解壓縮流的主要作用
瞭解java io支援的三種壓縮格式
掌握ZipOutputStream、ZipFile、ZipInputStream三個類的作用

3、具體內容

ZipEntry

ZipOutputStream
負責將一個檔案或檔案夾壓縮成一個zip檔案。

執行個體代碼:

import java.io.File ;import java.io.FileInputStream ;import java.io.InputStream ;import java.util.zip.ZipEntry ;import java.util.zip.ZipInputStream ;import java.io.FileInputStream ;public class ZipInputStreamDemo01{    public static void main(String args[]) throws Exception{    // 所有異常拋出        File zipFile = new File("d:" + File.separator + "mldn.zip") ;    // 定義壓縮檔名稱        ZipInputStream input = null ;    // 定義壓縮輸入資料流        input = new ZipInputStream(new FileInputStream(zipFile)) ;    // 執行個體化ZIpInputStream        ZipEntry entry = input.getNextEntry() ;    // 得到一個壓縮實體        System.out.println("壓縮實體名稱:" + entry.getName()) ;        input.close() ;    }};

以上的作業碼完成的只是一個檔案的壓縮,如果要完成一個檔案夾呢?

import java.io.File ;import java.io.OutputStream ;import java.io.InputStream ;import java.util.zip.ZipEntry ;import java.util.zip.ZipFile ;import java.util.zip.ZipInputStream ;import java.io.FileInputStream ;import java.io.FileOutputStream ;public class ZipInputStreamDemo02{    public static void main(String args[]) throws Exception{    // 所有異常拋出        File file = new File("d:" + File.separator + "mldndir.zip") ;    // 定義壓縮檔名稱        File outFile = null ;    // 輸出檔案的時候要有檔案夾的操作        ZipFile zipFile = new ZipFile(file) ;    // 執行個體化ZipFile對象        ZipInputStream zipInput = null ;    // 定義壓縮輸入資料流        OutputStream out = null ;    // 定義輸出資料流,用於輸出每一個實體內容        InputStream input = null ;    // 定義輸入資料流,讀取每一個ZipEntry        ZipEntry entry = null ;    // 每一個壓縮實體        zipInput = new ZipInputStream(new FileInputStream(file)) ;    // 執行個體化ZIpInputStream        while((entry = zipInput.getNextEntry())!=null){    // 得到一個壓縮實體            System.out.println("解壓縮" + entry.getName() + "檔案。") ;            outFile = new File("d:" + File.separator + entry.getName()) ;    // 定義輸出的檔案路徑            if(!outFile.getParentFile().exists()){    // 如果輸出檔案夾不存在                outFile.getParentFile().mkdir() ;    // 建立檔案夾            }            if(!outFile.exists()){    // 判斷輸出檔案是否存在                outFile.createNewFile() ;    // 建立檔案            }            input = zipFile.getInputStream(entry) ;    // 得到每一個實體的輸入資料流            out = new FileOutputStream(outFile) ;    // 執行個體化檔案輸出資料流            int temp = 0 ;            while((temp=input.read())!=-1){                out.write(temp) ;            }            input.close() ;        // 關閉輸入資料流            out.close() ;    // 關閉輸出資料流        }        input.close() ;    }};

3.2、ZipFile
是一個專門表示壓縮檔的類

ZipFile在執行個體化的時候必須接收File類的執行個體,此File類的執行個體是指向一個壓縮的*.zip檔案。

執行個體化時需要接收File類的引用

import java.io.File ;import java.io.FileInputStream ;import java.io.InputStream ;import java.util.zip.ZipEntry ;import java.util.zip.ZipOutputStream ;import java.util.zip.ZipFile ;import java.io.FileOutputStream ;public class ZipFileDemo01{    public static void main(String args[]) throws Exception{    // 所有異常拋出        File file = new File("d:" + File.separator + "mldn.zip") ;    // 找到壓縮檔        ZipFile zipFile = new ZipFile(file) ;    // 執行個體化ZipFile對象        System.out.println("壓縮檔的名稱:" + zipFile.getName()) ;    // 得到壓縮檔的名稱    }};

通過ZipFile檔案,為mldn.zip進行解壓縮操作。

import java.io.File ;import java.io.FileInputStream ;import java.io.InputStream ;import java.io.OutputStream ;import java.util.zip.ZipEntry ;import java.util.zip.ZipOutputStream ;import java.util.zip.ZipFile ;import java.io.FileOutputStream ;public class ZipFileDemo02{    public static void main(String args[]) throws Exception{    // 所有異常拋出        File file = new File("d:" + File.separator + "mldn.zip") ;    // 找到壓縮檔        File outputFile = new File("d:" + File.separator + "mldn_unzip.txt") ; // 定義解壓縮的檔案名稱        ZipFile zipFile = new ZipFile(file) ;    // 執行個體化ZipFile對象        ZipEntry entry = zipFile.getEntry("mldn.txt") ;    // 得到一個壓縮實體        OutputStream out = new FileOutputStream(outputFile) ; // 執行個體化輸出資料流        InputStream input = zipFile.getInputStream(entry) ;    // 得到一個壓縮實體的輸入資料流        int temp = 0 ;        while((temp=input.read())!=-1){            out.write(temp) ;        }        input.close() ;    // 關閉輸入資料流        out.close() ;    // 關閉輸出資料流    }};

3.3、ZipInputStream
可以不用輸入實體名稱,就可以得到每一個ZipEntry對象。

import java.io.File ;import java.io.FileInputStream ;import java.io.InputStream ;import java.util.zip.ZipEntry ;import java.util.zip.ZipOutputStream ;import java.io.FileOutputStream ;public class ZipOutputStreamDemo01{    public static void main(String args[]) throws Exception{    // 所有異常拋出        File file = new File("d:" + File.separator + "mldn.txt") ;    // 定義要壓縮的檔案        File zipFile = new File("d:" + File.separator + "mldn.zip") ;    // 定義壓縮檔名稱        InputStream input = new FileInputStream(file) ;    // 定義檔案的輸入資料流        ZipOutputStream zipOut = null ;    // 聲明壓縮流對象        zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;        zipOut.putNextEntry(new ZipEntry(file.getName())) ;    // 設定ZipEntry對象        zipOut.setComment("www.mldnjava.cn") ;    // 設定注釋        int temp = 0 ;        while((temp=input.read())!=-1){    // 讀取內容            zipOut.write(temp) ;    // 壓縮輸出        }        input.close() ;    // 關閉輸入資料流        zipOut.close() ;    // 關閉輸出資料流    }};

利用此特性並結合ZipFile就可以完成解壓縮檔案夾的功能。
ZipFile對象,可以找到每一個ZipEntry的輸入資料流,但是ZipInputStream並不能得到每一個輸入資料流,所以需要使用ZipFile,但是ZipInputStream在取得每一個ZipEntry的時候,不需要每一個ZipEntry的名稱。

import java.io.File ;import java.io.FileInputStream ;import java.io.InputStream ;import java.util.zip.ZipEntry ;import java.util.zip.ZipOutputStream ;import java.io.FileOutputStream ;public class ZipOutputStreamDemo02{    public static void main(String args[]) throws Exception{    // 所有異常拋出        File file = new File("d:" + File.separator + "mldn") ;    // 定義要壓縮的檔案夾        File zipFile = new File("d:" + File.separator + "mldndir.zip") ;    // 定義壓縮檔名稱        InputStream input = null ;    // 定義檔案輸入資料流        ZipOutputStream zipOut = null ;    // 聲明壓縮流對象        zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ;        zipOut.setComment("www.mldnjava.cn") ;    // 設定注釋        int temp = 0 ;        if(file.isDirectory()){    // 判斷是否是檔案夾            File lists[] = file.listFiles() ;    // 列出全部檔案            for(int i=0;i<lists.length;i++){                input = new FileInputStream(lists[i]) ;    // 定義檔案的輸入資料流                zipOut.putNextEntry(new ZipEntry(file.getName()                    +File.separator+lists[i].getName())) ;    // 設定ZipEntry對象                while((temp=input.read())!=-1){    // 讀取內容                    zipOut.write(temp) ;    // 壓縮輸出                }                input.close() ;    // 關閉輸入資料流            }        }        zipOut.close() ;    // 關閉輸出資料流    }};
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.