当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:17:00  来源:本站整理

java用Zip举行多文件保存[Java编程]

赞助商链接



  本文“java用Zip举行多文件保存[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
供应了Zip支持的Java 1.1库显得越发全面.操纵它可以便利地保存多个文件.乃至有一个独立的类来简化对Zip文件的读操作.这个库采采取的是尺度Zip格局,所以能与当前因特网上利用的大量压缩、解压工具很好地合作.下面这个例子采纳了与前例相同的情势,但能按照我们需求掌握肆意数目的号令行参数.除此之外,它展示了若何用Checksum类来计算和校验文件的“校验和”(Checksum).可选用两种范例的Checksum:Adler32(速度要快一些)和CRC32(慢一些,但更精确).
//: 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();
    }
  }
} ///:~
关于要加入压缩档的每一个文件,都必须调用putNextEntry(),并将其传送给一个ZipEntry对象.ZipEntry对象包含了一个功效全面的接口,操纵它可以获得和设置Zip文件内那个特定的Entry(进口)上可以承受的全部数据:名字、压缩后和压缩前的长度、日期、CRC校验和、额外字段的数据、注释、压缩办法以及它能否一个目录进口等等.但是,固然Zip格局供应了设置密码的办法,但Java的Zip库没有供应这方面的支持.并且固然CheckedInputStream和CheckedOutputStream同时供应了对Adler32和CRC32校验和的支持,但是ZipEntry只支持CRC的接口.这固然属于基层Zip格局的限制,但却限制了我们利用速度更快的Adler32.
为解压文件,ZipInputStream供应了一个getNextEntry()办法,能在有的前提下返回下一个ZipEntry.作为一个更简便的办法,可以用ZipFile对象读取文件.该对象有一个entries()办法,可认为ZipEntry返回一个Enumeration(列举).
为读取校验和,必须多少拥有对关联的Checksum对象的拜候权限.在这里保存了指向CheckedOutputStream和CheckedInputStream对象的一个句柄.但是,也可以只占据指向Checksum对象的一个句柄.
Zip流中一个令人困惑的办法是setComment().正如前面展示的那样,我们可在写一个文件时设置注释内容,但却没有办法取出ZipInputStream内的注释.看起来,仿佛只能通过ZipEntry一一进口地供应对注释的完好支持.
当然,利用GZIP或Zip库时并不但仅限于文件——可以压缩任何东西,包含要通过网络衔接发送的数据.
  以上是“java用Zip举行多文件保存[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .