zip创建读取压缩文件

来源:互联网 发布:如何利用微信推广淘宝 编辑:程序博客网 时间:2024/06/05 23:40
//随便写点留着备用/**   * @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();          }      }}

0 0
原创粉丝点击