zoukankan      html  css  js  c++  java
  • util之解压ZIP工具类

    package com.***.tools;
    
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.nio.charset.Charset;
    import java.util.Enumeration;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    
    /**
     * 解压zip文件
     */
    public final class ZipUtil {
        private static final int buffer = 2048;
    
        /**
         * 解压Zip文件
         * @param path zip文件目录
         */
        public static void unZip(String path) {
            int count = -1;
            String savepath = "";
    
            File file = null;
            InputStream is = null;
            FileOutputStream fos = null;
            BufferedOutputStream bos = null;
    
            savepath = path.substring(0, path.lastIndexOf(".")) + File.separator; // 保存解压文件目录
            new File(savepath).mkdir(); // 创建保存目录
            ZipFile zipFile = null;
            try {
                zipFile = new ZipFile(path,Charset.forName("GBK")); // 解决中文乱码问题
                Enumeration<?> entries = zipFile.entries();  //枚举ZIP中的所有文件
    
                while (entries.hasMoreElements()) {
                    byte buf[] = new byte[buffer];
    
                    ZipEntry entry = (ZipEntry) entries.nextElement();
    
                    String filename = entry.getName();  //获取文件名
                    filename = savepath + filename;
                    boolean ismkdir = false;
                    if (filename.lastIndexOf("/") != -1) { // 检查此文件是否带有文件夹
                        ismkdir = true;
                    }
    
                    if (entry.isDirectory()) { // 如果此枚举文件是文件夹则创建,并且遍历下一个
                        file = new File(filename);
                        file.mkdirs();
                        continue;
                    }
                    file = new File(filename);  //此枚举文件不是目录
                    if (!file.exists()) {  //如果文件不存在并且文件带有目录
                        if (ismkdir) {
                            new File(filename.substring(0, filename
                                    .lastIndexOf("/"))).mkdirs(); // 先创建目录
                        }
                    }
                    file.createNewFile(); //再创建文件
    
                    is = zipFile.getInputStream(entry);
                    fos = new FileOutputStream(file);
                    bos = new BufferedOutputStream(fos, buffer);
    
                    while ((count = is.read(buf)) > -1) {
                        bos.write(buf, 0, count);
                    }
                    bos.flush();
                }
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } finally {
                try {
                    if (bos != null) {
                        bos.close();
                    }
                    if (fos != null) {
                        fos.close();
                    }
                    if (is != null) {
                        is.close();
                    }
                    if (zipFile != null) {
                        zipFile.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 相关阅读:
    雷林鹏分享:Lua if 嵌套语句
    雷林鹏分享:Lua if...else 语句
    雷林鹏分享:Lua if 语句
    debug 使用lldb
    mysql高负载的问题排查
    一个NULL引发的血案
    画椭圆型
    异常分析
    go 语言的库文件放在哪里?如何通过nginx代理后还能正确获取远程地址
    defer 要放在return之前
  • 原文地址:https://www.cnblogs.com/rdchen/p/13896922.html
Copyright © 2011-2022 走看看