java基础---->Zip压缩的使用(转)
2016-03-22 21:06
423 查看
java中提供了对压缩格式的数据流的读写。它们封装到现成的IO 类中,以提供压缩功能。下面我们开始java中压缩文件的使用。
目录导航:
关于压缩的简要说明
GZIP压缩文件的使用
ZIP压缩文件的使用
GZIP与ZIP压缩的比较
友情链接
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(枚举)。
一、 我们创建一个GzipCompress类,用于GZIP压缩类的测试:首先是压缩文件方法compress():
二、 我们创建GZIP的解压缩方法:uncompress()
三、 在Main方法运行,得到如下结果:
控制台打印: Hello World.
在uncompress文件夹下生成test.gz文件
二、 我们创建ZIP的解压缩方法:uncompress1()
三、 我们创建ZIP的解压缩另外一种方法:uncompress2()
四、 运行compress()和uncompress1()方法,得到结果如下:
五、 运行compress()和uncompress2()方法,得到结果如下:
ZIP: 它可以方便地保存多个文件。甚至有一个独立的类来简化对Zip 文件的读操作
http://www.cnblogs.com/huhx/p/javaCompress.html
目录导航:
关于压缩的简要说明
GZIP压缩文件的使用
ZIP压缩文件的使用
GZIP与ZIP压缩的比较
友情链接
关于压缩的简要说明
一、 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 文件的读操作
友情链接
测试项目源代码下载 访问密码 56c3http://www.cnblogs.com/huhx/p/javaCompress.html
相关文章推荐
- insertionSort()插入排序
- The connection to adb is down, and a severe error has occured. You must restart adb and Eclipse.Ple
- 链表题 java
- eclipse中查看项目有多少行代码
- JAVA hashcode和equals为何要同时重写
- Java输入输出流
- 如何创建struts2第一个程序及其原理解释
- 关于java中的对象交互问题(模拟时钟)
- myeclipse快捷键总结
- foreach语句
- Java基础学习第二十一天——递归与字节流
- java产生4位随机数
- java 对xml文件进行 增删改查
- java指导
- 91. Decode Ways | Java最短代码实现
- JAVA设计模式:简单静态工厂方法模式
- Java读取远程服务器文件到本地
- Java之封装、继承、多态(重载、重写)
- 【集合框架】JDK1.8源码分析之ArrayList(六)
- java web :Context initialization failed