zoukankan      html  css  js  c++  java
  • Zip包解压工具类

    最近在做项目的自动检测离线升级,使用到了解压zip包的操作,本着拿来主义精神,搞了个工具类(同事那边拿的),用着还不错。

    package com.winning.polaris.admin.utils;
    
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    import org.apache.commons.compress.archivers.ArchiveEntry;
    import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
    import org.apache.commons.compress.utils.IOUtils;
    import org.apache.commons.lang.StringUtils;
    import org.apache.log4j.Logger;
    
    public class ZipUtil {
        private static final Logger logger = Logger.getLogger(ZipUtil.class);
    
        /**
         *
         * 解压压缩文件
         * @param filePath 目标文件路径
         * @param fileName 目标文件名称
         * @param decompressionPath 解压到的目录路径
         * @return
         */
        public static boolean decompressionZipFile(String filePath, String fileName, String decompressionPath) {
            boolean result = true;
            File file = new File(filePath +File.separator+ fileName);
            if(!file.exists()){
                logger.info("【解压压缩文件】时间:"+TimeTool.getDateTime()+"文件路径" + filePath +File.separator+ fileName+"文件不存在");
                return false;
            }
            ZipArchiveInputStream zipArchiveInputStream = null;
            BufferedOutputStream os=null;
            try {
                zipArchiveInputStream =new ZipArchiveInputStream(new FileInputStream(file)) ;
                ArchiveEntry archiveEntry = null;
                String firstFolderName=fileName.substring(0,fileName.indexOf(".zip"));
                int count=0;
                while ((archiveEntry = zipArchiveInputStream.getNextEntry()) != null) {
                    logger.info("时间:"+TimeTool.getDateTime()+"解压文件名称:" + archiveEntry.getName());
                    boolean sign=StringUtils.equals((firstFolderName+"/").toLowerCase(),archiveEntry.getName().toLowerCase());
                    count++;
                    if(count==1 && !sign){
                        decompressionPath=decompressionPath+File.separator+firstFolderName;
                    }
                    File outFile =new File(decompressionPath,archiveEntry.getName());
                    if(archiveEntry.isDirectory()) {
                        if (!outFile.exists())
                            outFile.mkdirs();
                    }else{
                        try {
                            os = new BufferedOutputStream(new FileOutputStream(outFile));
                            IOUtils.copy(zipArchiveInputStream, os);
                        }finally {
                            IOUtils.closeQuietly(os);
                        }
                    }
                }
            } catch (Exception ex) {
                result = false;
                logger.error("【解压更新文件】时间:" + TimeTool.getDateTime() + ",解压文件出错:" + ex.getMessage());
                ex.printStackTrace();
            }finally {
                try {
                    if (zipArchiveInputStream != null) {
                        zipArchiveInputStream.close();
                    }
                }catch (Exception e){
                    //result = false;
                    logger.error("【解压更新文件】时间:" + TimeTool.getDateTime() + ",关闭流出错:" + e.getMessage());
                    e.printStackTrace();
                }
            }
            return result;
        }
    
    
    
        public static void main(String[] args) {
    
            String filePath = "F:\hmap111\HMAP_V2.0";
            String fileName = "megrez.zip";
            String decompressionPath = "F:\hmap111\HMAP_V2.0";
            System.out.println(decompressionZipFile(filePath, fileName, decompressionPath));
        }
    }
  • 相关阅读:
    System.Configuration引用后ConfigurationManager方法用不了
    HTTP 错误 500.23
    slide ——首尾相接の平滑切换效果
    函数式编程初探之回调
    Call & Apply. It's easy!
    【W3C】 CSS3选择器
    再谈原型和原型链
    ECMA学习小结(3)——constructor 和 prototype
    ECMA学习小结(2)——一切皆对象
    ECMA学习小结(1)——什么是ECMAScript,JAVAScript与ECMA的关系
  • 原文地址:https://www.cnblogs.com/sloveling/p/zip.html
Copyright © 2011-2022 走看看