Java中的Zip进行多文件的保存

来源:互联网 发布:java 没错溢出 编辑:程序博客网 时间:2024/06/05 00:31
package zipDemo;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.util.Enumeration;import java.util.zip.Adler32;import java.util.zip.CheckedInputStream;import java.util.zip.CheckedOutputStream;import java.util.zip.ZipEntry;import java.util.zip.ZipFile;import java.util.zip.ZipInputStream;import java.util.zip.ZipOutputStream;/** * 用Java中的Zip进行多文件的保存练习 * @author 於之 * */public class Zip { public static void main(String[] args) throws Exception{ /**  * 压缩多个文件(zip可以压缩任何文件,包括二进制文件)  * 将多个文件压缩到同一个压缩文件中  */        args = new String[3];          args[0] = "d:/file/a.txt";          args[1] = "d:/file/b.txt";          args[2] = "d:/file/c.txt";                  /**         * 压缩文件存放的路径以及名称         */        FileOutputStream f = new FileOutputStream("d:/file/abc.zip");                  /**         * 作用是为任何OutputStream产生校验和         * 第一个参数是制定产生校验和的输出流,第二个参数是指定Checksum的类型 (Adler32(较快)和CRC32两种)         */        CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32());          /**         * 用于将数据压缩成Zip文件格式         */        ZipOutputStream zos = new ZipOutputStream(csum);          BufferedOutputStream out = new BufferedOutputStream(zos);          zos.setComment("A test of Java Zipping");  //添加注释        int i=1;        for(String arg : args){//一次对需要压缩的文件依次操作            System.out.println("writing file: "+arg);              BufferedReader in = new BufferedReader(new FileReader(arg));              /**             * 对于每一个要被存放到压缩包的文件,都必须调用ZipOutputStream对象的putNextEntry()方法             * 参数是一个 ZipEntry(String arg)对象,arg表示文件的路径,可以直接使用被压缩文件的路径作为压缩包中             * 文件的路径,也可以自己重新定义每个文件在压缩包中的路径             *              * ZipEntry只有CRC校验和类型             */                        zos.putNextEntry(new ZipEntry("file/"+i+".txt"));  //同一个压缩包中文件名不能一样            i++;            int c;              while((c=in.read())!=-1){                  out.write(c);              }              in.close();              out.flush();          }          out.close();          //压缩操作完成        //。。。。。。。。。。。。。。。。。。。。。。       System.out.println("CheckSum: "+csum.getChecksum().getValue());                                   /**        * 解压压缩文件第一种方法        */        System.out.println("Reading file");          FileInputStream fi = new FileInputStream("d:/file/abc.zip");          CheckedInputStream csumi = new CheckedInputStream(fi, new Adler32());          ZipInputStream in2 = new ZipInputStream(csumi);          BufferedInputStream bis = new BufferedInputStream(in2);          /**         * 从ZipInputStream中获取NextEntry对象           */        //ZipEntry ze=in2.getNextEntry();   如果在循环外面获取NextEntry,那么只会执行一次,本例中ze永远等于file/1.txt        ZipEntry ze;        while((ze=in2.getNextEntry())!=null){              System.out.println("Reading file "+ze);              int x;              byte[] car=new byte[1024];            while((x=bis.read())!=-1){                  System.out.write(x);  //将文件读取的内容打印到控制台            }          }          if(args.length==1)System.out.println("Checksum: "+csumi.getChecksum().getValue());          bis.close();          /**         * 解压文件的第二种方法  直接使用ZipFile对象         */        ZipFile zf = new ZipFile("d:/file/abc.zip");          Enumeration e = zf.entries();        while(e.hasMoreElements()){              ZipEntry ze2 = (ZipEntry) e.nextElement();              System.out.println("File:ZipEntry: "+ze2);          }     }  }

原创粉丝点击