java实现解压缩工具方法

来源:互联网 发布:火车座位被占知乎 编辑:程序博客网 时间:2024/06/06 05:03

本实现逻辑依赖于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("******************解压完毕********************");     }}
原创粉丝点击