日期:2011-03-22 16:17:00 来源:本站整理
java用Zip举行多文件保存[Java编程]
本文“java用Zip举行多文件保存[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
供应了Zip支持的Java 1.1库显得越发全面.操纵它可以便利地保存多个文件.乃至有一个独立的类来简化对Zip文件的读操作.这个库采采取的是尺度Zip格局,所以能与当前因特网上利用的大量压缩、解压工具很好地合作.下面这个例子采纳了与前例相同的情势,但能按照我们需求掌握肆意数目的号令行参数.除此之外,它展示了若何用Checksum类来计算和校验文件的“校验和”(Checksum).可选用两种范例的Checksum:Adler32(速度要快一些)和CRC32(慢一些,但更精确).
关于要加入压缩档的每一个文件,都必须调用putNextEntry(),并将其传送给一个ZipEntry对象.ZipEntry对象包含了一个功效全面的接口,操纵它可以获得和设置Zip文件内那个特定的Entry(进口)上可以承受的全部数据:名字、压缩后和压缩前的长度、日期、CRC校验和、额外字段的数据、注释、压缩办法以及它能否一个目录进口等等.但是,固然Zip格局供应了设置密码的办法,但Java的Zip库没有供应这方面的支持.并且固然CheckedInputStream和CheckedOutputStream同时供应了对Adler32和CRC32校验和的支持,但是ZipEntry只支持CRC的接口.这固然属于基层Zip格局的限制,但却限制了我们利用速度更快的Adler32.//: ZipCompress.java // Uses Java 1.1 Zip compression to compress // any number of files whose names are passed // on the command line. import java.io.*; import java.util.*; import java.util.zip.*; public class ZipCompress { public static void main(String[] args) { try { FileOutputStream f = new FileOutputStream("test.zip"); CheckedOutputStream csum = new CheckedOutputStream( f, new Adler32()); ZipOutputStream out = new ZipOutputStream( new BufferedOutputStream(csum)); out.setComment("A test of Java Zipping"); // Can't read the above comment, though for(int i = 0; i < args.length; i++) { System.out.println( "Writing file " + args[i]); BufferedReader in = new BufferedReader( new FileReader(args[i])); out.putNextEntry(new ZipEntry(args[i])); int c; while((c = in.read()) != -1) out.write(c); in.close(); } out.close(); // Checksum valid only after the file // has been closed! System.out.println("Checksum: " + csum.getChecksum().getValue()); // Now extract the files: System.out.println("Reading file"); FileInputStream fi = new FileInputStream("test.zip"); CheckedInputStream csumi = new CheckedInputStream( fi, new Adler32()); ZipInputStream in2 = new ZipInputStream( new BufferedInputStream(csumi)); ZipEntry ze; System.out.println("Checksum: " + csumi.getChecksum().getValue()); while((ze = in2.getNextEntry()) != null) { System.out.println("Reading file " + ze); int x; while((x = in2.read()) != -1) System.out.write(x); } in2.close(); // Alternative way to open and read // zip files: ZipFile zf = new ZipFile("test.zip"); Enumeration e = zf.entries(); while(e.hasMoreElements()) { ZipEntry ze2 = (ZipEntry)e.nextElement(); System.out.println("File: " + ze2); // ... and extract the data as before } } catch(Exception e) { e.printStackTrace(); } } } ///:~
为解压文件,ZipInputStream供应了一个getNextEntry()办法,能在有的前提下返回下一个ZipEntry.作为一个更简便的办法,可以用ZipFile对象读取文件.该对象有一个entries()办法,可认为ZipEntry返回一个Enumeration(列举).
为读取校验和,必须多少拥有对关联的Checksum对象的拜候权限.在这里保存了指向CheckedOutputStream和CheckedInputStream对象的一个句柄.但是,也可以只占据指向Checksum对象的一个句柄.
Zip流中一个令人困惑的办法是setComment().正如前面展示的那样,我们可在写一个文件时设置注释内容,但却没有办法取出ZipInputStream内的注释.看起来,仿佛只能通过ZipEntry一一进口地供应对注释的完好支持.
当然,利用GZIP或Zip库时并不但仅限于文件——可以压缩任何东西,包含要通过网络衔接发送的数据.
以上是“java用Zip举行多文件保存[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:Java归档(jar)实用程序
- ·下一篇文章:java压缩文件
- ·中查找“java用Zip举行多文件保存”更多相关内容
- ·中查找“java用Zip举行多文件保存”更多相关内容
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论