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));
        }
    }
  • 相关阅读:
    k8s命令
    git绿色、红色图标不显示的问题
    Git下载
    文档(PDF Word Excel PPT)转HTML前端预览方案
    腾讯云生成临时访问链接
    cron表达式的双重人格:星期和数字到底如何对应?
    Windows下nginx报错解决:CreateFile() "xxx/logs/nginx.pid" failed
    Windows命令行在任意位置启动和退出nginx
    解决博客园TinyMCE模式下内置插入代码块功能不支持Go语言的问题(两个并不完美的解决方案)
    linux系统调用system()函数详解
  • 原文地址:https://www.cnblogs.com/sloveling/p/zip.html
Copyright © 2011-2022 走看看