博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用java.util.zip包来生成压缩文件
阅读量:2058 次
发布时间:2019-04-29

本文共 1860 字,大约阅读时间需要 6 分钟。

使用java.util.zip包来生成压缩文件简单示例:

public static void main(String[] args) {
try ( // 读取需要压缩的文件,也可从其他途径获取 FileInputStream fileInputStream1 = new FileInputStream("D://file/file-1.tsv"); FileInputStream fileInputStream2 = new FileInputStream("D://file/file-2.txt"); FileInputStream fileInputStream3 = new FileInputStream("D://file/file-3.xls"); // 定义压缩文件输出流,经测试,zip和rar格式均能正常生成 FileOutputStream fileOutputStream = new FileOutputStream("D://file/test.zip"); // 1、定义压缩输出流,数据放入后再输出,会进行压缩 ZipOutputStream zipOut = new ZipOutputStream(fileOutputStream) ) {
FileInputStream[] fileInputStreams = {
fileInputStream1, fileInputStream2, fileInputStream3}; // 压缩文件中的各个文件名 String[] fileNames = {
"file-1.tsv", "file-2.tsv", "file-3.tsv"}; // 循环处理各个需要压缩的文件,不太清楚使用FileChannel读取数据,可以移步本人关于NIO的总结,其中有比较详细的介绍 // 传送 https://blog.csdn.net/D578332749/article/details/97390888 for (int i = 0; i < fileInputStreams.length; i++) {
FileChannel fileChannel = fileInputStreams[i].getChannel(); ByteBuffer buf = ByteBuffer.allocate(128); int bytesRead = fileChannel.read(buf); // 2、放入一个文件实体,在此后直至下一次putNextEntry所有write的数据,均属于这个实体 zipOut.putNextEntry(new ZipEntry(fileNames[i])); while (bytesRead != -1) {
buf.flip(); while (buf.hasRemaining()) {
// 3、写入数据 zipOut.write(buf.get()); } buf.clear(); bytesRead = fileChannel.read(buf); } } // 4、结束压缩 zipOut.finish(); } catch (Exception e) {
System.out.println(e); }}

简单总结,使用java.util.zip包来生成zip压缩文件主要有4个关键步骤:

  1. 定义压缩输出流,数据放入后再输出,会进行压缩;
  2. 放入一个文件实体,在此后直至下一次putNextEntry所有write的数据,均属于这个实体;
  3. 写入数据;
  4. 结束压缩;
你可能感兴趣的文章
5.15 相约上海!2021 年度首届云原生 Meetup | KubeSphere & Friends
查看>>
使用 Cilium 作为网络插件部署 K8s + KubeSphere
查看>>
万变不离其宗,性能优化也有章可循
查看>>
别再乱用 Prometheus 联邦了,分享一个 Prometheus 高可用新方案
查看>>
Litmus 实践:让群魔在混沌中乱舞,看 K8s 能撑到何时
查看>>
Prometheus 存储层的演进
查看>>
Kubernetes 边缘节点抓不到监控指标?试试这个方法!
查看>>
不对全文内容进行索引的 Loki 到底优秀在哪里
查看>>
太强大了!这些 Go 的难点问题都能解决!
查看>>
万字长文:K8s 创建 pod 时,背后到底发生了什么?
查看>>
后云原生时代,Kubernetes:你看我还有机会吗?
查看>>
Wintun:一款惊艳的 WireGuard 虚拟网卡接口驱动
查看>>
个人学习方法分享
查看>>
时隔多年。。终于有一款云原生消息系统出仕了!
查看>>
[译]数据包在 Kubernetes 中的一生(1)
查看>>
[译]数据包在 Kubernetes 中的一生(2)
查看>>
[译]数据包在 Kubernetes 中的一生(3)
查看>>
从源头解决 Service Mesh 问题最彻底!
查看>>
一次“不负责任”的 K8s 网络故障排查经验分享
查看>>
一次有趣的 Docker 网络问题排查经历
查看>>