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格式)相关推荐

  1. android 压缩多个文件,Android下文件的压缩和解压(Zip格式)

    Zip文件结构 ZIP文件结构如下图所示, File Entry表示一个文件实体,一个压缩文件中有多个文件实体. 文件实体由一个头部和文件数据组,Central Directory由多个File he ...

  2. Linux下文件的压缩和解压

    文件的压缩和解压 Gzip格式的:    tar   -czvf    要存的名字.tar.gz     要打包的东西或目录 bzip2格式的:    tar   -cjvf 要存的名字.tar.bz ...

  3. linux带密码解压密码,linux 下文件加密压缩和解压的方法

    方法一:用tar命令 对文件加密压缩和解压 压缩: [html] view plain copy tar -zcf - filename |openssl des3 -salt -k password ...

  4. linux 下文件加密压缩和解压的方法

    方法一:用tar命令 对文件加密压缩和解压 压缩: tar -zcf - filename |openssl des3 -salt -k password | dd of=filename.des3 ...

  5. linux下文件的压缩和解压缩

    linux下文件的压缩和解压缩 目录 1.压缩 2.解压缩 3.归档工具 一. 压缩 compress: -d:解压缩,相当于uncompres-c:结果输出至标准输出,不删除原文件-v:显示详情 - ...

  6. linux系统如何解gz文件,Linux 系统 压缩和解压 gz 格式文件

    Linux 系统 压缩和解压 gz 格式文件 引言 前面我们说了在 Linux 系统上比较常用的打包压缩解压  tar   及 zip 文件 的命令,那 Linux 上还有什么使用比较广泛的压缩解压文 ...

  7. 【Linux】文件的压缩和解压

    欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行.动静不失其时,其道光明. 目录 1.压缩格式 2.压缩软件 3.tar  命令简介 4.tar  命令压缩 5.总结 1.压 ...

  8. powershell 压缩和解压zip

    项目场景: 前端项目发布到windows环境需要需要先压缩传输后再解压 问题描述 简单的压缩和解压zip在windows下,视窗情况下,右键就可以实现,但是如果是在命令下,windows不自带unzi ...

  9. linux压缩100天以上的文件,如何提高几十甚至上百G文件的压缩和解压效率

    如何提高几十甚至上百G文件的压缩和解压效率 (2012-06-05 02:21:35) 标签: 的 如何 杂谈 如何提高几十甚至上百G文件的压缩和解压效率需求: 有几十.上百G的文件需要压缩.解压.前 ...

最新文章

  1. koa连接mysql_CentOS 环境 Node + Koa2 连接 MySQL (ECS系列三)
  2. 【Linux】23_网络管理物理层详解
  3. Spring MVC 3.2.2 +easyui 返回JSON数据格式
  4. boost::intrusive::smart_ptr用法的测试程序
  5. 2.Explore Your Data
  6. dedecms织梦最新0day
  7. iview 后台管理系统 搭建
  8. 相机成像原理_照相机、摄影机的成像原理
  9. leetcode Course Schedule II
  10. [转]Git使用基础篇
  11. Android 出海 Admob 踩坑
  12. 华为企业组网实例:VRRP+MSTP典型组网配置
  13. TKK: 更新 TKK 失败,请检查网络连接(亲测有效)
  14. 银行数字化转型导师坚鹏:数字化转型背景下的银行对公客户营销
  15. CR、LF、CRLF 都是什么鬼?
  16. 计算与推断思维 七、函数和表格
  17. 各种图像处理库中imread函数的区别
  18. Js中对JSON数组的常用操作
  19. HK1box硬改天线
  20. C# 创建barcode 并打印

热门文章

  1. RavenDB:基于Windows/.NET平台的NoSQL数据库
  2. 装饰模式在Intermec CK1应用程序中通讯模块的应用
  3. AtomicStampedReference源码分析
  4. Anaconda安装tensorflow报错问题解决方法
  5. 32位JDK和64位JDK
  6. Petapoco使用SQLite的异常问题
  7. django app中扩展users表
  8. 2月份Web服务器份额:排名不变 仅Microsoft份额上扬
  9. 浅谈https(创建、传输、断开)
  10. Silverlight学习日记(三)