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

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);  
	        } 
	    }  
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

於之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值