Android下文件的压缩和解压(Zip格式)
来源:互联网 发布:电话软件哪个好 编辑:程序博客网 时间:2024/06/06 03:14
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
- Android下文件的压缩和解压(Zip格式)
- unix下文件的压缩和解压
- linux下文件的压缩和解压
- Linux系统下文件的压缩和解压
- linux 下文件加密压缩和解压的方法
- linux 下文件加密压缩和解压的方法
- linux 下文件加密压缩和解压的方法
- 压缩zip文件和解压zip格式的文件
- linux 下文件的压缩与解压(1) -- tar
- linux 下文件的压缩与解压(2)
- linux 下文件的压缩与解压(3)
- C#下文件的压缩与解压
- .NET 下文件的压缩与解压
- linux下文件的解压与压缩
- linux下文件的压缩及解压
- Linux下文件的压缩解压打包
- android -解压和压缩zip
- Linux下文件压缩解压
- 2017"百度之星"程序设计大赛
- Thread Base
- rman的备份与恢复
- python opencv入门 Hough圆变换(28)
- 自定义设置css checkbox样式
- Android下文件的压缩和解压(Zip格式)
- HTTP和HTTPS的区别
- JAVA设计模式之单例模式
- Glide生命周期管理
- 希尔排序
- Python中的深拷贝与浅拷贝
- 19、oracle:关键字exists
- UVa -- 10635 Prince and Princess 【想法】
- 微信小程序多层嵌套循环,二级数组遍历