java編程思想 第十八章 壓縮

import java.io.*;
import java.util.*;
import java.util.zip.*;

public class Ans {
    public static void main(String[] args) throws IOException {
        //test0();
        test1();
    }

    static void test0() throws IOException {
        //壓縮是使用字節流,所以我們無法直接使用字符流,但是可以使用InputStreamReader來轉換
        //使用GZIP對單文件壓縮
        BufferedReader fr = new BufferedReader(new FileReader("test"));
        BufferedOutputStream bos = new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream("test.gz")));
        int c;
        while ((c = fr.read())!=-1)
            bos.write(c);
        bos.close();
        fr.close();
        BufferedReader br = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream("test.gz"))));
        String s;
        while ((s = br.readLine())!=null)
            System.out.println(s);
    }

    static void test1() throws IOException {
        //使用zip對多文件壓縮
        CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream("test.zip"),new Adler32());
        ZipOutputStream zos = new ZipOutputStream(cos);
        BufferedOutputStream bos = new BufferedOutputStream(zos);
        String []s = {"test","test2"};
        zos.setComment("can this be read??");
        for (String str: s) {
            BufferedReader br = new BufferedReader(new FileReader(str));
            zos.putNextEntry(new ZipEntry(str));
            int c;
            while ((c = br.read())!=-1)
                bos.write(c);
            br.close();
            bos.flush();                                                    //只有這樣才能寫入
        }
        bos.close();
        System.out.println(cos.getChecksum().getValue());
        /*CheckedInputStream cis = new CheckedInputStream(new FileInputStream("test.zip"),new Adler32());
        ZipInputStream zis = new ZipInputStream(cis);
        BufferedReader br = new BufferedReader(new InputStreamReader(zis));
        ZipEntry ze;
        while ((ze = zis.getNextEntry())!=null) {
            System.out.println(ze+":");
            String str;
            while ((str = br.readLine())!=null)
                System.out.println("    "+str);
        }*/
        ZipFile zp = new ZipFile("test.zip");                       //使用ZipFile可以更簡便的讀取
        System.out.println(zp.getComment());                            //所寫的註釋只有使用ZipFile才能直接讀
        Enumeration<? extends ZipEntry> e = zp.entries();
        while (e.hasMoreElements()) {
            ZipEntry ze = e.nextElement();
            BufferedReader br = new BufferedReader(new InputStreamReader(zp.getInputStream(ze)));
            String str;
            while ((str = br.readLine())!=null)
                System.out.println(str);
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章