栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java解析zip文件内容

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java解析zip文件内容

功能支持
  • 支持标准zip输入流解析文件内容(无需依赖File)
  • 支持读取网络url解析zip文件内容
  • 支持本地zip文件路径解析文件内容
Maven依赖

  cn.hutool
  hutool-all
  5.4.3
代码示例
package com.liuzhihong.practice.api.impl.utils;

import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.io.*;
import java.nio.charset.Charset;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;


@Slf4j
@SuppressWarnings("java:S1118")
public class CustomZipUtil {

    
    private static final Charset DEFAULT_CHARSET = CharsetUtil.defaultCharset();

    
    public static Map unzipToMapByUrl(final String zipUrl, final List filterFileSuffix) {
        final InputStream inputStream = URLUtil.getStream(URLUtil.url(zipUrl));
        return unzipByStream(inputStream, filterFileSuffix);
    }

    
    public static Map unzipToMapByPath(final String path, final List filterFileSuffix) {
        final BufferedInputStream inputStream = FileUtil.getInputStream(path);
        return unzipByStream(inputStream, filterFileSuffix);
    }

    
    public static Map unzipToMapByFile(final File zipFile, final List filterFileSuffix) {
        final BufferedInputStream inputStream = FileUtil.getInputStream(zipFile);
        return unzipByStream(inputStream, filterFileSuffix);
    }

    
    public static Map unzipByStream(final InputStream inputStream, List filterFileSuffix) throws UtilException {
        final Map contentMap = Maps.newHashMap();
        try (//转换成zip输入流
             final ZipInputStream zipStream = new ZipInputStream(inputStream, DEFAULT_CHARSET);
             final BufferedInputStream bufferedInputStream = new BufferedInputStream(zipStream)) {
            ZipEntry zipEntry;
            //循环读取压缩包里面的文件
            while (null != (zipEntry = zipStream.getNextEntry())) {
                if (!zipEntry.isDirectory()) {
                    parseFileContent(zipEntry, bufferedInputStream, contentMap, filterFileSuffix);
                } else {
                    log.info("zipEntry is directory : {}", zipEntry.getName());
                }
            }
        } catch (IOException e) {
            throw new UtilException(e);
        } finally {
            IoUtil.close(inputStream);
        }
        return contentMap;
    }

    private static void parseFileContent(final ZipEntry zipEntry, final BufferedInputStream bufferedInputStream, final Map contentMap,
                                         final List filterFileSuffix) throws IOException {
        final StringBuilder content = new StringBuilder();
        final String entryName = zipEntry.getName();
        final int lastIndex = StrUtil.lastIndexOfIgnoreCase(entryName, ".");
        //文件后缀
        final String suffix = StringUtils.substring(entryName, lastIndex + 1);
        if (!filterFileSuffix.contains(suffix)) {
            final byte[] bytes = new byte[(int) zipEntry.getSize()];
            bufferedInputStream.read(bytes, 0, (int) zipEntry.getSize());
            //将文件转成流
            try (final InputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
                 final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(byteArrayInputStream))) {
                //读取文件里面的内容
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    content.append(line);
                }
                contentMap.put(entryName, content.toString());
            } catch (final Exception e) {
                log.warn("parse inputStream filed.", e);
            }
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号