这个总结源于Java编程思想第四版18.11节的案例:

完整代码地址:

  Java编程思想:压缩

相关Api地址:

  ZipStream

  ZipEntry

  ZipFile

进行压缩时:
  1.创建CheckedOutputStream流,需要传入一个OutputStream流,及检验和对象
  2.CheckedOutputStream流做参数创建ZipOutputStream流
  3.以ZipOutputStream流做参数创建BufferedOutputStream流,作为真正的输出流

  4.得到你需要压缩的文件的输入流

  5.根据文件名创建ZipEntry对象(可以为任意字符串,这个被称为Zip条目)
  6.调用ZipOutputStream流的putNextEntry()方法,传入上一步创建的ZipEntry。告知流,这个条目要开始写入东西了
  7.调用ZipOutputStream流的write()方法,将需要压缩的流写入其中
  8.写完一个条目后,调用流的flush()方法

  9.关闭流

核心就是:每次向里写入一个新文件时,需要将相关信息包装成ZipEntry,然后需要通过putNextEntry()告知ZipOutputStream流

String[] files = new String[]{...};

CheckOutputStream csum = new CheckOutputStream(new FileOutputStream("test.zip"),new Adler32);
ZipOutputStream zos = new ZipOutputStream(csum);
BufferedOutputStream out = new BufferedOutputStream(zos);

for(String file : files) {
    BufferedInputStream filein = new BufferedInputStream(new FileInputStream(file));

    ZipEntry entry = new ZipEntry(file);     //可以对ZipEntry设置很多参数

    zos.putNextEntry(entry);
    int c;
    )
        out.write(c);
    in.close();
    out.flush();
}
out.close();

进行解压缩时:
  1.创建CheckedInputStream流,需要传入一个InputStream流,及检验和对象
  2.CheckedInputStream流做参数创建ZipInputStream流
  3.以ZipInputStream流做参数创建BufferedInputStream流,作为真正的输入流

  4.通过getNextEntry()告知ZipInputStream流,准备好下一个条目的数据,我需要取出来了
  5.从真正输入流中取得数据

CheckInputStream csum = new CheckInputStream(new FileInputStream("test.zip"),new Adler32);
ZipInputStream zis = new ZipInputStream(csum);
BufferedInputStream in = new BufferedInputStream(zos);

while(zis.getNextEntry != null){
    int x;
    )
        System.out.println(x);
}

查看压缩文件信息具体信息时:
  1.创建ZipFile对象,传入压缩文件的地址
  2.调用getEntries()得到所有的条目
  3.遍历条目,输出条目的具体信息

ZipFile zf = new ZipFile("text.zip");
Enumration e = zf.entries();
while(e.hasMoreElements()){
    ZipEntry ze = (ZipEntry)e.nextElement();
    System.out.prinln(ze);
    }
}

6.关闭流

最新文章

  1. bzoj 3611: [Heoi2014]大工程
  2. REDIS key notification
  3. DE1-SOC开发板上搭建NIOS II处理器运行UCOS II
  4. EasyUI两种动态添加tab Iframe页面的方法
  5. IVM import vector machine
  6. Java NIO与IO
  7. T-SQL基础(4) - 子查询
  8. IOS View传统的价值观之间
  9. vstemplate关键点纪要
  10. 第一章:火狐浏览器 : 环境配置: FireFox 版本38 + jdk 7 + selenium 2.53.6 + selenum-version 2.48.2
  11. C#学习笔记-状态模式
  12. linu下C语言之BMP图片操作编程(上)
  13. array_merge和array+的区别分析
  14. Ubuntu下的Selenium爬虫的配置
  15. 干货——详解Java中的关键字
  16. ASP.NET Web API 框架研究 ASP.NET Web API 路由
  17. PostgreSQL11.2 configure卡住 checking for DocBook XML V4.2
  18. 无网络环境下使用docker加载镜像
  19. 【BZOJ4318】OSU! 期望DP
  20. bzoj3224: Tyvj 1728 普通平衡树(打个splay暖暖手)

热门文章

  1. Win10自带应用不喜欢?一条命令全部卸载
  2. Easy Compression Library(代替TFileStream, TMemoryStream and TStream)
  3. 解决com.android.dex.DexException: Multiple dex files define Lcom/google/gson/JsonSerializer;
  4. CentOS 如何删除/delete/remove 老的 kernel
  5. QT5的post Event解析
  6. 一条命令,秒秒钟完成MD5、SHA1校验,这就叫效率!
  7. flask相关使用
  8. VS Code真机测试步骤
  9. java泛型方法返回泛型结果
  10. Quartz.Net实现作业定时调度详解