这个总结源于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.关闭流

Java用Zip进行压缩的更多相关文章

  1. Java对zip格式压缩和解压缩

    Java对zip格式压缩和解压缩 通过使用java的相关类可以实现对文件或文件夹的压缩,以及对压缩文件的解压. 1.1 ZIP和GZIP的区别 gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格 ...

  2. [Java 基础] 使用java.util.zip包压缩和解压缩文件

    reference :  http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ...

  3. java.util.zip.Deflater 压缩 inflater解压 实例

    原文:java压缩解压缩类实例[转] package com.example.helloworld; import java.io.ByteArrayOutputStream; import java ...

  4. Java用ZIP格式压缩和解压缩文件

    转载:java jdk实例宝典 感觉讲的非常好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,须要导入该包. 使用zipoutput ...

  5. 利用Java进行zip文件压缩与解压缩

    摘自: https://www.cnblogs.com/alphajuns/p/12442315.html 工具类: package com.alphajuns.util; import java.i ...

  6. java.util.zip.ZipOutputStream压缩无乱码(原创)

    package io; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.FileI ...

  7. Java /C# 实现文件压缩

    纯粹为了记录. 参考了 https://www.cnblogs.com/zeng1994/p/7862288.html import java.util.List; import java.util. ...

  8. 用java实现zip压缩

    本来是写到spaces live上的,可是代码的显示效果确实不怎么好看.在javaeye上试了试代码显示的顺眼多了. 今天写了个用java压缩的功能,可以实现对文件和目录的压缩. 由于java.uti ...

  9. Java实现zip压缩多个文件下载

    为了更好的演示,首先创建一个文件实体FileBean,包含了文件路径和文件名称: package com.javaweb.entity; import java.io.Serializable; /* ...

随机推荐

  1. 安装CUDA和cuDNN

    GPU和CPU区别 1,CPU主要用于处理通用逻辑,以及各种中断事物 2,GPU主要用于计算密集型程序,可并行运作: NVIDIA 的 GeForce 显示卡系列采用 GPU 特性进行快速计算,渲染电 ...

  2. Python爬虫: "追新番"网站资源链接爬取

    “追新番”网站 追新番网站提供最新的日剧和日影下载地址,更新比较快. 个人比较喜欢看日剧,因此想着通过爬取该网站,做一个资源地图 可以查看网站到底有哪些日剧,并且随时可以下载. 资源地图 爬取的资源地 ...

  3. Ubuntu16.04下配置laravel

    参考 http://tecadmin.net/install-laravel-framework-on-ubuntu/# 本人亲试,完全正确 注意: Step 4 – Set Encryption K ...

  4. Inno Setup制作最简单的安装程序

    目标就是[把exe程序放到制定目录,然后自动把工程需要的dll放到system32目录下,自动注册注册表.] 实现上述需求,用Inno Setup可以非常方便快捷实现. 安装Inno Setup. 点 ...

  5. oracle 使用db_link 导入导出小结

    客户有一个需求,是将一个库中的某个用户迁移到一台新的oracle服务器上,因数据量较小,并且不涉及版本的升级,所以可以采用创建一个dblink,然后通过这个dblink直接从源库将用户数据导出并导入到 ...

  6. SQL Server中 SET 和 SELECT 赋值有什么区别?

    SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT.对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们并没有注意,其实这两种 ...

  7. 毕设(三)NotifyIcon

    NotifyIcon是一个比较特殊的组件,其特殊之处是既可以把它归类到控件中,也可以把它归类到组件中.这是因为将其拖放到设计窗体后,我们并不能马上看到它的界面(像组件),而是在运行时才能看到它(像控件 ...

  8. GNU自动化工具使用全过程详解,以及在线手册

    [root@localhost test3]# cat add.h#ifndef _ADD_H_#define _ADD_H_ extern int add(int, int); #endif [ro ...

  9. QT 文件拖放事件dropEvent和dragEnterEvent

    重载以下两个函数,可以实现将文本文件拖放进文本编辑器 void MainWindow::dragEnterEvent(QDragEnterEvent *event)//拖进事件 { if(event- ...

  10. java集合框架collection(6)继承结构图

    根据<java编程思想>里面的说法,java集合又叫容器,按照单槽和双槽分为两类,Collection和Map,这两个都是接口. 一.Collection Collection下面又分了三 ...