日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Android下文件的压缩和解压(Zip格式)

發布時間:2023/11/29 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android下文件的压缩和解压(Zip格式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Zip文件結構

ZIP文件結構如下圖所示, File Entry表示一個文件實體,一個壓縮文件中有多個文件實體。

文件實體由一個頭部和文件數據組,Central Directory由多個File header組成,每個File header都保存一個文件實體的偏移,文件最后由End of central directory結束。

用到的類

ZipFile

此類用于從 ZIP 文件讀取條目ZipEntry,在解壓時用到

ZipEntry

此類用于表示 ZIP 文件條目

ZipOutputStream

此類為以 ZIP 文件格式寫入文件實現輸出流過濾器

Enumeration

實現 Enumeration 接口的對象,它生成一系列元素,一次生成一個。連續調用 nextElement 方法將返回一系列的連續元素,在解壓縮時會用到

CheckedOutputStream

需要維護寫入數據校驗和的輸出流。校驗和可用于驗證輸出數據的完整性。

CRC32

可用于計算數據流的 CRC-32 的類

壓縮流程

首先要封裝出一個ZipOutputStream:?

ZipOutputStream zipOutputStream = new ZipOutputStream(new CheckedOutputStream(new FileOutputStream(file),new CRC32()));

?

有了ZipOutputStream后,要壓縮一個文件,就先在輸出流加入一個ZipEntry,然后獲取需要壓縮的文件輸入流,然后再輸出:

注意最后要刷新和關閉輸出流

zipOutputStream.flush(); zipOutputStream.close();

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

if (fileSrc.isDirectory()) {File[] files = fileSrc.listFiles();name = name+"/"; zipOutputStream.putNextEntry(new ZipEntry(name)); // 建一個文件夾 System.out.println("目錄名: "+name); for (File f : files) { zip(zipOutputStream,name+f.getName(),f); System.out.println("目錄: "+name+f.getName()); } }

?

解壓縮流程

解壓縮就是壓縮的逆過程,其過程就是從壓縮文件中獲取ZipEntry,獲取其輸入流,將其輸出到指定位置:

這也是單個文件的解壓縮,解壓縮文件夾只需遍歷ZipFile,判斷ZipEntry是目錄還是文件,具體操作不再詳解,可到文末的源碼中查看。

END

本文參考:?
Android 解壓zip文件你知道多少?

源碼:?
https://github.com/xiaoniu/AndroidZipFile

轉載于:https://www.cnblogs.com/fuyaozhishang/p/9282101.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Android下文件的压缩和解压(Zip格式)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。