Java文件壓縮

從接觸計算機開始,便知道了壓縮文件的存在,剛開始不解(本來我一次就可以打開文件,現(xiàn)在卻多了一步,乃是解壓。。。)到了后來,我才慢慢明白壓縮的重要性,除了節(jié)省空間,還節(jié)省了時間。有時候壓縮文件的結(jié)果會讓你吃驚,大概在原文件的50%左右,這樣在網(wǎng)絡端傳輸?shù)臅r間將縮短一半。由此可見,它是有多么的重要。

單個文件壓縮

首選GZIP

public static void compress(File source, File gzip) {
    if(source == null || gzip == null) 
        throw new NullPointerException();
    BufferedReader reader = null;
    BufferedOutputStream bos = null;
    try {
        //讀取文本文件可以字符流讀取
        reader = new BufferedReader(new FileReader(source));
        //對于GZIP輸出流,只能使用字節(jié)流
        bos = new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(gzip)));
        String data;
        while((data = reader.readLine()) != null) {
            bos.write(data.getBytes());
        }
    }  catch (IOException e) {
        throw new RuntimeException(e);
    }  finally {
        try {
            if(reader != null)
                reader.close();
            if(bos != null) 
                bos.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        
    }
}

多文件壓縮

public static void compressMore(File[] files, File outFile) {
    if(files == null || outFile == null) 
        throw new NullPointerException();
    ZipOutputStream zipStream = null;
    try {
        //用校驗流確保輸出數(shù)據(jù)的完整性
        CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream(outFile), new Adler32());
        //用緩沖字節(jié)輸出流進行包裝
        zipStream = new ZipOutputStream(new BufferedOutputStream(cos));
        for (File file : files) {
            if(file != null) {
                BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
                try {
                    //添加實體到流中,實際上只需要指定文件名稱
                    zipStream.putNextEntry(new ZipEntry(file.getName()));
                    int c;
                    while((c = in.read()) != -1)
                        zipStream.write(c);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                } finally {
                    in.close();
                }   
            }
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        try{
            if(zipStream != null)
                zipStream.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • File代表文件和文件夾JDk 1.4版引入了一套新的I/O系統(tǒng)稱之為NIONIO - Non-blocking ...
    _Raye閱讀 920評論 0 0
  • 先不要說什么。上代碼。 壓縮單個文件 看完看下面的: 壓縮目錄下的所有文件 溫馨提醒:看不清楚的可以右鍵保存到本地...
    Ling912閱讀 459評論 0 0
  • 初學Linux,記錄資料,以備留存,親手測試了一部分,有的正確,不正確的也改了,沒有全部測試,如有誤,望大神們不吝...
    世外大帝閱讀 5,684評論 1 32
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 為什么要整理一下Linux下的打包和壓縮工具呢?原因很簡單,因為遇到問題了:游戲服務器可執(zhí)行文件、配置和各種資源文...
    davidpp閱讀 10,185評論 0 18

友情鏈接更多精彩內(nèi)容