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 压缩多个文件,Android下文件的压缩和解压(Zip格式)相关推荐

  1. java读取文件夹下的所有txt文件,java读取文件夹下文件及txt内容

    public class PositionController { // 读取txt内容 public static String txt2String(File file) { StringBuil ...

  2. Java实现文件压缩与解压[zip格式,gzip格式]

    原文:http://www.cnblogs.com/visec479/p/4112881.html#3069573 Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个 ...

  3. java gzip 解压文件_Java实现文件压缩与解压[zip格式,gzip格式]

    原文:http://www.cnblogs.com/visec479/p/4112881.html#3069573 Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个 ...

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

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

  5. Linux统计某文件夹下文件、文件夹的个数

    统计某文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计某文件夹下目录的个数 ls -l |grep "^d"|wc -l 统计文件夹下文件 ...

  6. Linux下查看文件夹下文件个数

    统计某文件夹下文件的个数 ls -l |grep "^-"|wc -l 统计某文件夹下目录的个数 ls -l |grep "^d"|wc -l 统计文件夹下文件 ...

  7. python观察日志(part18)--遍历文件夹下文件并判断后缀

    学习笔记,仅供参考 import ospath = r"F:\MyStudio\PythonStudio\goatbishop.project01\MyNewWork" fileN ...

  8. Centos 统计文件夹下文件和文件夹的个数

    运营管理中经常会碰到关于文件统计的需求,近期在做系统迁移,正好做个备忘. 关键词: d  : directory -   : 一般文件 以下命令在需要统计的目录下进行,如: # cd 目标文件夹 统计 ...

  9. linux: 批量修改文件夹及文件夹下文件的名字

    假如我有一个文件夹,文件夹下面有一些文件,如下所示: Gideon/gideon_lisha/Gideon_samuel/Gideon_nathan.xml Gideon/lisha_gideon/G ...

  10. linux根目录数量限制,windows,linux文件夹下文件上限最大个数

    1.FAT16文件系统, 可以保存的文件体积最大值是 4 GB - 1 byte (2^32 bytes - 1 byte): 卷的最大体积是4GB:每个卷上最多可以保存的文件数量是65,536个 ( ...

最新文章

  1. http协议基础(七)通用首部字段
  2. php7.0康乐安装_Linux环境PHP7.0安装
  3. JSP + AJAX 打造簡單聊天室
  4. cardsui-for-android
  5. Bear in the Field(CF-385E)
  6. 边栏实现过程中,导入style.css没用
  7. 转:浅析C++中的this指针
  8. 【经验分享】h3c模拟器HCL安装问题集锦
  9. 【HDU 6274】Master of sequence【二分答案+下取整转换】
  10. jvisualvm监控远程服务器,Jvisualvm监控远程tomcat
  11. 永恒之蓝漏洞复现(包括常见问题处理)和修复方案
  12. 什么是透明背景格式logo?Logo白底变透明工具测评
  13. 怎样通过《Sbo维护与开发助手软件》进行Sbo开发和维护(1/3)
  14. C语言填空概念题及答案,C语言填空题以及答案
  15. 程序员修炼(一)----剑指天下
  16. 如何在Kindle上阅读漫画书和漫画
  17. 《AngularJS深度剖析与最佳实践》一2.10 承诺
  18. 将模板内容存储到数据库,通过URL访问报表
  19. matlab中图线颜色大全
  20. Warning: Leaking Caffe2 thread-pool after fork

热门文章

  1. 红包随机算法微信群红包随机算法
  2. Linux 命令(121)—— cal 命令
  3. C/C++ 的全缓冲、行缓冲和无缓冲
  4. MySQL 5.7.27 MGR 单主/多主+ ProxySQL
  5. Linux(centos7.4)上FTP服务器搭建(使用yum)
  6. Zabbix 触发器函数方法整理
  7. 《学生快捷记账系统》——个人博客04——星期四
  8. SHELL中,如何分割字符串
  9. MongoDB副本集配置系列二:配置MongoDB副本集
  10. 【C/C++】通过无类型指针实现泛型拷贝(内存拷贝)