Android下檔案的壓縮和解壓(Zip格式)

2021-08-07 07:46:14 字數 1525 閱讀 4257

zip檔案結構如下圖所示, file entry表示乙個檔案實體,乙個壓縮檔案中有多個檔案實體。

檔案實體由乙個頭部和檔案資料組,central directory由多個file header組成,每個file header都儲存乙個檔案實體的偏移,檔案最後由end of central directory結束。

此類用於從 zip 檔案讀取條目zipentry,在解壓時用到

此類用於表示 zip 檔案條目

此類為以 zip 檔案格式寫入檔案實現輸出流過濾器

實現 enumeration 介面的物件,它生成一系列元素,一次生成乙個。連續呼叫 nextelement 方法將返回一系列的連續元素,在解壓縮時會用到

需要維護寫入資料校驗和的輸出流。校驗和可用於驗證輸出資料的完整性。

可用於計算資料流的 crc-32 的類

首先要封裝出乙個zipoutputstream:

zipoutputstream zipoutputstream = new zipoutputstream(new checkedoutputstream(new fileoutputstream(file),new crc32()));
有了zipoutputstream後,要壓縮乙個檔案,就先在輸出流加入乙個zipentry,然後獲取需要壓縮的檔案輸入流,然後再輸出:

注意最後要重新整理和關閉輸出流

zipoutputstream.flush();

zipoutputstream.close();

當然這只是單個檔案的壓縮,我們壓縮檔案時經常會壓縮整個資料夾,所以還需要遍歷整個文件,針對目錄和檔案分別作出判斷:

}解壓縮就是壓縮的逆過程,其過程就是從壓縮檔案中獲取zipentry,獲取其輸入流,將其輸出到指定位置:

這也是單個檔案的解壓縮,解壓縮資料夾只需遍歷zipfile,判斷zipentry是目錄還是檔案,具體操作不再詳解,可到文末的原始碼中檢視。

本文參考:

android 解壓zip檔案你知道多少?

原始碼:

Android下檔案的壓縮和解壓(Zip格式)

zip檔案結構如下圖所示,file entry表示乙個檔案實體,乙個壓縮檔案中有多個檔案實體。檔案實體由乙個頭部和檔案資料組,central directory由多個file header組成,每個file header都儲存乙個檔案實體的偏移,檔案最後由end of central directo...

Linux下檔案的壓縮和解壓

壓縮技術現在主流的是gz和bz2 下面分別講解兩種技術的壓縮和解壓 tar czf mytest.tar.gz dir1 dir2 hello.c 打包壓縮 tar xzf mytest.tar.gz 解壓 tar cf mytest.tar dir1 dir2 hello.c 打包 gzip my...

Linux下檔案的壓縮和解壓

tar命令 解包 tar xvf filename.tar 打包 tar cvf filename.tar dirname 解包 tar i zstd xvf file.tar.zst gz命令 解壓1 gunzip filename.gz 解壓2 gzip d filename.gz 壓縮 gzi...