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. 查询一个字符串的子串出现的次数在sql中
  2. mysql row 转int_mysql_row[]取值转换有关问题,
  3. 电大计算机统考模拟题在哪里学,[2017年电大]电大-计算机统考模拟题.doc
  4. C语言windows编程编写窗口
  5. eBay再度问路中国
  6. QT学习:目录操作与文件系统
  7. 关于SIM800C MINI V4.0 V4版本 5v供电模块重启问题
  8. Django内置权限扩展案例
  9. python实现qq登录界面_使用Python编写一个QQ办公版的图形登录界面!
  10. 阿里取消周报!但普通数据人的周报、月报焦虑,谁来拯救?
  11. Bailian4102 宠物小精灵之收服【模拟】
  12. 技术分析淘宝的超卖宝贝
  13. 古今中外数学思想__读书笔记
  14. 第三届同花顺算法大赛 | 2022 | AI算法
  15. 计算机安全监察word,全国计算机统考押题计算机安全
  16. 证券公司信息化——8
  17. 合资品牌车联网或率先尝到车联网技术的甜头?
  18. django Using the URLconf defined in test02.urls, Django tried these URL patterns, in this order:
  19. 超分辨率重建数据集制作:生成低分辨率数据集
  20. Google Amp学习笔记(一)

热门文章

  1. 也谈大公司病3——治大国不是烹小鲜
  2. 微软力挺Silverlight 反击美棒球赛用Flash直播
  3. 中科同向 备份软件 引领科技 存储未来
  4. Linux 命令(98)—— basename 命令
  5. Linux 命令(93)—— updatedb 命令
  6. Linux 命令(31)—— find 命令
  7. C/C++代码调试:快速定位内存的申请和释放的位置
  8. 定时任务@Scheduled(cron = “* * * * * *?“) 表达式详解
  9. 自动加载简单实现 __autoload()
  10. 4059. 统计某指定字符出现个数