博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java基础---->Zip压缩的使用(转)
阅读量:6120 次
发布时间:2019-06-21

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

  java中提供了对压缩格式的数据流的读写。它们封装到现成的IO 类中,以提供压缩功能。下面我们开始java中压缩文件的使用。

 

目录导航:

 

关于压缩的简要说明

一、 Java中有着压缩的类:

  • CheckedInputStream GetCheckSum()为任何InputStream 产生校验和(不仅是解压)
  • CheckedOutputStream GetCheckSum()为任何OutputStream 产生校验和(不仅是解压)
  • DeflaterOutputStream 用于压缩类的基础类
  • ZipOutputStream 一个DeflaterOutputStream,将数据压缩成Zip 文件格式
  • GZIPOutputStream 一个DeflaterOutputStream,将数据压缩成GZIP 文件格式
  • InflaterInputStream 用于解压类的基础类
  • ZipInputStream 一个DeflaterInputStream,解压用Zip 文件格式保存的数据
  • GZIPInputStream 一个DeflaterInputStream,解压用GZIP 文件格式保存的数据

 

二、 压缩库的一些说明:

  • 压缩类库是按字节方式而不是字符方式处理的,它们属于InputStream和OutputStream继承层次结构的一部分

 

三、 ZIP压缩的使用注意:

  • 对于要加入压缩档的每一个文件,都必须调用putNextEntry(),并将其传递给一个ZipEntry 对象。
  • ZipEntry 对象包含了一个功能全面的接口,利用它可以获取和设置Zip 文件内那个特定的Entry(入口)上能够接受的所有数据:名字、压缩后和压缩前的长度、日期、CRC 校验和、额外字段的数据、注释、压缩方法以及它是否一个目录入口等等。
  • 尽管CheckedInputStream 和CheckedOutputStream 同时提供了对Adler32 和CRC32 校验和的支持,但是ZipEntry 只支持CRC 的接口
  • 为解压文件,ZipInputStream 提供了一个getNextEntry()方法,能在有的前提下返回下一个ZipEntry
  • 可以用ZipFile 对象读取文件。该对象有一个entries()方法,可以为ZipEntry 返回一个Enumeration(枚举)。

 

GZIP压缩文件的使用

我们通过一个简单的程序用例来展开今天压缩类的使用讲解 ,程序结构如下

一、 我们创建一个GzipCompress类,用于GZIP压缩类的测试:首先是压缩文件方法compress():

复制代码
// 压缩文件private static void compress() throws Exception {    BufferedReader in = new BufferedReader(new FileReader(("compress/test.txt")));    BufferedOutputStream out = new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream("uncompress/test.gz")));    int c;    while ((c = in.read()) != -1) {        out.write(c);    }    in.close();    out.close();}
复制代码

 

二、 我们创建GZIP的解压缩方法:uncompress()

复制代码
// 解压缩文件private static void uncompress() throws Exception {    BufferedReader in = new BufferedReader(            new InputStreamReader(new GZIPInputStream(new FileInputStream("uncompress/test.gz"))));    String str;    while ((str = in.readLine()) != null) {        System.out.println(str);    }    in.close();}
复制代码

 

三、 在Main方法运行,得到如下结果:

  • 控制台打印: Hello World.
  • 在uncompress文件夹下生成test.gz文件

 

ZIP压缩文件的使用

一、 我们创建一个ZipCompress类,用于GZIP压缩类的测试:首先是压缩文件方法compress():压缩huhx.png,test2.txt, test3.txt, test4.txt文件

复制代码
private final static String[] resources = new String[] { "huhx.png", "test2.txt", "test3.txt", "test4.txt" };// 压缩文件private static void compress() throws Exception {    FileOutputStream f = new FileOutputStream("uncompress/test.zip");    CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32());    ZipOutputStream zos = new ZipOutputStream(csum);    BufferedOutputStream out = new BufferedOutputStream(zos);    zos.setComment("A test of java zipping");    ZipEntry entry = null;    for (String resource : resources) {        System.out.println("writing file: " + resource);        BufferedReader in = new BufferedReader(new FileReader("compress/" + resource));        entry = new ZipEntry(resource);        entry.setComment(resource + " comments");        zos.putNextEntry(entry);        int c;        while ((c = in.read()) != -1) {            out.write(c);        }        in.close();        out.flush();    }    out.close();    System.out.println("checksum: " + csum.getChecksum().getValue());}
复制代码

 

二、 我们创建ZIP的解压缩方法:uncompress1()

复制代码
// 解压缩文件private static void uncompress1() throws Exception {    FileInputStream fi = new FileInputStream("uncompress/test.zip");    CheckedInputStream csum = new CheckedInputStream(fi, new Adler32());    ZipInputStream in2 = new ZipInputStream(csum);    BufferedInputStream bis = new BufferedInputStream(in2);    ZipEntry ze;    while ((ze = in2.getNextEntry()) != null) {        System.out.println("reading file: " + ze.getName());    }    System.out.println("checksum: " + csum.getChecksum().getValue());    bis.close();}
复制代码

 

三、 我们创建ZIP的解压缩另外一种方法:uncompress2()

复制代码
// 解压缩文件private static void uncompress2() throws Exception {    ZipFile zf = new ZipFile("uncompress/test.zip");    Enumeration
e = zf.entries(); while (e.hasMoreElements()) { ZipEntry entry = (ZipEntry) e.nextElement(); System.out.println("File: " + entry.getComment()); } zf.close();}
复制代码

 

四、 运行compress()和uncompress1()方法,得到结果如下:

 

五、 运行compress()和uncompress2()方法,得到结果如下:

 

GZIP与ZIP压缩的比较

  • GZIP: 如果只有单个数据流需要压缩(而不是一系列不同的数据),那么它就可能是最适当选择。
  • ZIP: 它可以方便地保存多个文件。甚至有一个独立的类来简化对Zip 文件的读操作

 

友情链接

  • 访问密码 56c3

http://www.cnblogs.com/huhx/p/javaCompress.html

 

你可能感兴趣的文章
linux后台运行程序
查看>>
win7 vs2012/2013 编译boost 1.55
查看>>
IIS7如何显示详细错误信息
查看>>
ViewPager切换动画PageTransformer使用
查看>>
coco2d-x 基于视口的地图设计
查看>>
C++文件读写详解(ofstream,ifstream,fstream)
查看>>
Android打包常见错误之Export aborted because fatal lint errors were found
查看>>
Tar打包、压缩与解压缩到指定目录的方法
查看>>
新手如何学习 jQuery?
查看>>
配置spring上下文
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
mysql-python模块编译问题解决
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
【Linux】linux经常使用基本命令
查看>>
Java 内存区域和GC机制
查看>>
更新代码和工具,组织起来,提供所有博文(C++,2014.09)
查看>>
HTML模块化:使用HTML5 Boilerplate模板
查看>>
登记申请汇总
查看>>
Google最新截屏案例详解
查看>>
2015第31周一
查看>>