zip创建读取压缩文件

//随便写点留着备用

/**  
 * @Project: publicapi
 * @Title: ZipTest.java
 * @Package net.*.test.user
 * @author zmn
 * @date 2015-1-6 下午01:34:25
 * @Copyright: 2015 All rights reserved.
 * @since jdk1.6
 * @version V1.0  
*/
package net.*.test.user;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

/**
 * @author amssy
 * @version V1.0
 */
           //创建压缩文件
public class ZipTest {
            //制定缓冲区大小
	 static final int BUFFER = 2048;
	   public static void main (String argv[]) {
		   ZipTest zipTest = new ZipTest();
		   zipTest.unCompress();
	   }
	  /**
 	   * <dt><span class="strong">方法描述:</span></dt><dd>将文件压入压缩文件</dd>
	   * <dt><span class="strong">作者:</span></dt><dd>zmn</dd>
	   * <dt><span class="strong">时间:</span></dt><dd>2015-1-6 下午05:38:47</dd>
	   * @since v1.0
	   */
	  public void compress(){
		  try {
	    	  //声明一个装饰输入流
	         BufferedInputStream origin = null;
	          //声明并实例化一个输出流  : 制定输出zip文件位置在 c:\\myfigs.zip 文件可以没有但是盘符和存放路径文件夹必须存在
	         FileOutputStream dest = new  FileOutputStream("c:\\myfigs.zip");
	          //声明并创建一个压缩流
	         ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
              //zip压缩流有两种压缩格式 DEFLATED 只生成zip包不压缩
	         //out.setMethod(ZipOutputStream.DEFLATED);
              //STORED 对数据
	         //out.setMethod(ZipOutputStream.STORED);
             //定义每次读取字节数
	         byte data[] = new byte[BUFFER];
	         // get a list of files from current directory
	         //创建待压缩的文件
	         File f = new File("c:\\file");
	         //获取文件夹下文件名集合
	         String files[] = f.list();
	         //循环添加压缩文件条目
	         for (int i=0; i < files.length; i++) {
	        	//创建文件输入流读取文件 
	            FileInputStream fi = new FileInputStream("c:\\file\\"+files[i]);
	            //创建装饰输入流装饰文件流 
	            origin = new BufferedInputStream(fi, BUFFER);
	            //创建一个压缩输出流的条目
	            ZipEntry entry = new ZipEntry(files[i]);
	            //将跳入添加到输出流中
	            out.putNextEntry(entry);
	            //从输出流读取文件添加到压缩文件中
	            //每次读取后data数组中有数据值 count为偏移量
	            int count;
	            while((count = origin.read(data, 0,BUFFER)) != -1) 
	            {
	               out.write(data, 0, count);
	            }
	            origin.close();
	         }
	         out.close();
	      } catch(Exception e) {
	         e.printStackTrace();
	      }
	  }
	  /**
	   * <dt><span class="strong">方法描述:</span></dt><dd>解压压缩文件</dd>
	   * <dt><span class="strong">作者:</span></dt><dd>zmn</dd>
	   * <dt><span class="strong">时间:</span></dt><dd>2015-1-6 下午05:59:56</dd>
	   * @since v1.0
	   */
      public void unCompress(){
    	  try {
    		  //创建装饰输出流
    	       BufferedOutputStream dest = null;
    	         //创建输入流读取zip
    	         FileInputStream fis = new FileInputStream("c:\\myfigs.zip");
    	         //用zip输入流流封装包裹装饰流进行解析
    	         ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
    	         //循环外创建一个条目
    	         ZipEntry entry;
    	         //循环zip中的条目 用法就和普通的流一样 这是装饰流装载了一个条目的流数据
    	         while((entry = zis.getNextEntry()) != null) {
    	            System.out.println("Extracting: " +entry);
    	            //偏移量
    	            int count;
    	            //储存数组
    	            byte data[] = new byte[BUFFER];
    	            //文件输出流声明输出文件位置
    	            FileOutputStream fos = new FileOutputStream("c:\\"+entry.getName());
    	            //装饰流包裹输出流
    	            dest = new BufferedOutputStream(fos, BUFFER);
    	            //用zip输入流读取压缩文件内容 (此时文件流内已经装载了一个条目的流数据)
    	            while ((count = zis.read(data, 0, BUFFER)) 
    	              != -1) {
    	            	//用输出流将读取到的data内的数据写出到文件
    	               dest.write(data, 0, count);
    	            }
    	            //清洗装饰流防止挂壁
    	            dest.flush();
    	            //关闭装饰流
    	            dest.close();
    	         }
    	         //关闭压缩流
    	         zis.close();
    	      } catch(Exception e) {
    	         e.printStackTrace();
    	      }
      }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值