java实现解压缩工具方法

本实现逻辑依赖于apache.tools

压缩

package com.weavernorth.file;
import java.io.BufferedInputStream;    
import java.io.File;    
import java.io.FileInputStream;    
import java.io.FileOutputStream;    
import java.util.zip.CRC32;    
import java.util.zip.CheckedOutputStream;    

import org.apache.log4j.Logger;  
import org.apache.tools.zip.ZipEntry;    
import org.apache.tools.zip.ZipOutputStream;    

/**
 * 阿帕奇压缩
 * @author Dylan
 *
 */
public class ZipCompressor {  
    private Logger logger = Logger.getLogger(ZipCompressor.class);  
    static final int BUFFER = 8192;    
    private File zipFile;    

    /** 
     * 压缩文件构造函数 
     * @param pathName 压缩的文件存放目录 
     */  
    public ZipCompressor(String pathName) {    
        zipFile = new File(pathName);    
    }    

    /** 
     * 执行压缩操作 
     * @param srcPathName 被压缩的文件/文件夹 
     */  
    public void compressExe(String srcPathName) {    
        File file = new File(srcPathName);    
        if (!file.exists()){  
            throw new RuntimeException(srcPathName + "不存在!");    
        }  
        try {    
            FileOutputStream fileOutputStream = new FileOutputStream(zipFile);    
            CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());    
            ZipOutputStream out = new ZipOutputStream(cos);    
            String basedir = "";    
            compressByType(file, out, basedir);    
            out.close();    
        } catch (Exception e) {   
            e.printStackTrace();  
            logger.error("执行压缩操作时发生异常:"+e);  
            throw new RuntimeException(e);    
        }    
    }    

    /** 
     * 判断是目录还是文件,根据类型(文件/文件夹)执行不同的压缩方法 
     * @param file  
     * @param out 
     * @param basedir 
     */  
    private void compressByType(File file, ZipOutputStream out, String basedir) {    
        /* 判断是目录还是文件 */    
        if (file.isDirectory()) {    
            logger.info("压缩:" + basedir + file.getName());    
            this.compressDirectory(file, out, basedir);    
        } else {    
            logger.info("压缩:" + basedir + file.getName());    
            this.compressFile(file, out, basedir);    
        }    
    }    

    /** 
     * 压缩一个目录 
     * @param dir 
     * @param out 
     * @param basedir 
     */  
    private void compressDirectory(File dir, ZipOutputStream out, String basedir) {    
        if (!dir.exists()){  
             return;    
        }  

        File[] files = dir.listFiles();    
        for (int i = 0; i < files.length; i++) {    
            /* 递归 */    
            compressByType(files[i], out, basedir + dir.getName() + "/");    
        }    
    }    

    /** 
     * 压缩一个文件 
     * @param file 
     * @param out 
     * @param basedir 
     */  
    private void compressFile(File file, ZipOutputStream out, String basedir) {    
        if (!file.exists()) {    
            return;    
        }    
        try {    
            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));    
            ZipEntry entry = new ZipEntry(basedir + file.getName());    
            out.putNextEntry(entry);    
            int count;    
            byte data[] = new byte[BUFFER];    
            while ((count = bis.read(data, 0, BUFFER)) != -1) {    
                out.write(data, 0, count);    
            }    
            bis.close();    
        } catch (Exception e) {    
            throw new RuntimeException(e);    
        }    
    }    
}  

解压

package com.weavernorth.file;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
/**
 * 阿帕奇解压
 * @author Dylan
 *
 */
public class ZipDecompress {

    /**
     * 解压到指定目录
     * @param zipPath
     * @param descDir
     */
     public static void unZipFiles(String zipPath,String descDir)throws IOException{
     unZipFiles(new File(zipPath), descDir);
     }
     /**
     * 解压文件到指定目录
     * @param zipFile
     * @param descDir
     */
     @SuppressWarnings("rawtypes")
     public static void unZipFiles(File zipFile,String descDir)throws IOException{
     File pathFile = new File(descDir);
     if(!pathFile.exists()){
      pathFile.mkdirs();
     }
     ZipFile zip = new ZipFile(zipFile);
     for(Enumeration entries = zip.getEntries();entries.hasMoreElements();){
      ZipEntry entry = (ZipEntry)entries.nextElement();
      String zipEntryName = entry.getName();
      InputStream in = zip.getInputStream(entry);
      String outPath = (descDir+zipEntryName).replaceAll("\\*", "/");;
      //判断路径是否存在,不存在则创建文件路径
      File file = new File(outPath.substring(0, outPath.lastIndexOf('/')));
      if(!file.exists()){
      file.mkdirs();
      }
      //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
      if(new File(outPath).isDirectory()){
      continue;
      }
      //输出文件路径信息
      System.out.println(outPath);

      OutputStream out = new FileOutputStream(outPath);
      byte[] buf1 = new byte[1024];
      int len;
      while((len=in.read(buf1))>0){
      out.write(buf1,0,len);
      }
      in.close();
      out.close();
      }
     System.out.println("******************解压完毕********************");
     }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值