java 解读zip文件,获取压缩包内各文件的流的集合

这篇具有很好参考价值的文章主要介绍了java 解读zip文件,获取压缩包内各文件的流的集合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

import cn.hutool.core.io.FileUtil;
import com.gbx.pay.service.monolith.common.exception.ui.ErrorException;
import org.apache.commons.lang3.StringUtils;

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

/**
 * zip文件读取工具类
 *
 * @author gbx
 */
public class ZipFileReadUtils {

    /**
     * 解读zip文件
     *
     * @param zipFile    压缩文件
     * @param suffixType 文件后缀(非空时只处理固定后缀的文件)
     * @return 处理结果
     * @throws IOException
     */
    public static List<InputStream> readZipToInputStreamList(File zipFile, String suffixType) throws IOException {
        List<InputStream> list = new ArrayList<>();
        //判断文件是否存在
        if (!zipFile.exists()) {
            throw new ErrorException("无效的zip文件");
        }
        //获取文件流
        InputStream inputStream = FileUtil.getInputStream(zipFile);
        //转化文件流为压缩文件流
        ZipInputStream zipInputStream = new ZipInputStream(inputStream, Charset.forName("gbk"));
        ZipEntry zipEntry;
        while ((zipEntry = zipInputStream.getNextEntry()) != null) {
            //如果文件后缀条件不为空且后缀条件不符则跳过文件读取
            if (StringUtils.isNotBlank(suffixType) && !zipEntry.getName().endsWith(suffixType)) {
                continue;
            }

            //文件读取处理
            byte[] buffer = new byte[1024];
            int len;
            ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
            while ((len = zipInputStream.read(buffer)) != -1) {
                byteStream.write(buffer, 0, len);
            }
            // 关闭流
            byteStream.close();

            //读取的文件转为所需的流添加到集合中
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteStream.toByteArray());
            list.add(byteArrayInputStream);
        }
        return list;
    }

    /**
     * 解读zip文件
     *
     * @param filePath   压缩文件路径
     * @param suffixType 文件后缀(非空时只处理固定后缀的文件)
     * @return 处理结果
     * @throws IOException
     */
    public static List<InputStream> readZipToInputStreamList(String filePath, String suffixType) throws IOException {
        File zipFile = new File(filePath);
        return readZipToInputStreamList(zipFile, suffixType);
    }
}

解读zip文件,把zip文件内的众文件转化成流集合,方便其他后续操作文章来源地址https://www.toymoban.com/news/detail-690639.html

到了这里,关于java 解读zip文件,获取压缩包内各文件的流的集合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java将指定文件夹按照文件目录压缩为zip压缩包

    将指定的压缩包作为流发送给浏览器 下面粘贴一些没有用的东西 ,是我自已业务的逻辑,,主要逻辑是根据传入文件不同 判断将压缩包发送给浏览器 还是将xls模板发送给浏览器

    2024年02月16日
    浏览(43)
  • java 文件压缩zip【两种方式】

     一、普通方式 二、使用zip4j方式 引入jar:  代码块:

    2024年02月11日
    浏览(42)
  • Java压缩文件为ZIP并加密

    当您需要将文件加密并保存为ZIP文件时,可以使用 net.lingala.zip4j 库来实现。 步骤1:准备工作 首先,确保您已经包含了 net.lingala.zip4j 库,并将其添加到您的Java项目中。您可以通过Maven或Gradle等构建工具来添加这个库。仓库地址 步骤2:单文件压缩 接下来,编写Java代码来执行

    2024年02月05日
    浏览(35)
  • Java 压缩多个文件为zip包(中间不生成临时文件,直接压缩为zip二进制流),以及解压zip包二进制流为文件

    这篇博客将提供俩种方法, 提前生成要压缩的多个文件,然后读取文件夹多层或一层去遍历压缩zip包 直接用原始文件名称及二进制流,压缩返回zip包二进制流,中间不生成冗余文件; 很明显方法2更优一些; 解压zip文件或者zip文件流验证; 压缩俩个文件到zip包,并分别解析

    2024年02月06日
    浏览(55)
  • java~将多个输出流压缩成一个zip文件

    hutool工具包可以帮我们完成这件事,几行代码可以实现,我们提供两种方式,压缩本地文件和压缩内存流。 扩展阅读:如果希望进行模版技术,可以看一下org.apache.velocity.tools:velocity-tools-generic包,可直接引用依赖 *版本 引用依赖 org.apache.velocity 是 Apache Velocity 模板引擎的 Ja

    2024年02月05日
    浏览(42)
  • Java的zip文件压缩与解压:ZipInputStream,ZipOutputStream

       用ZipOutputStream来压缩一个文件夹时,要搭配ZipEntry来使用。ZipEntry是用来创建压缩文件的。    举个例子,向压缩文件中添加一个文件的代码: 如下图:    在创建ZipEntry对象时可以指定文件在压缩包的位置:new ZipEntry(“second-dirsecond-01.txt”)    在使用ZipOutputStrea

    2024年02月16日
    浏览(52)
  • Java实现打包压缩文件或文件夹生成zip以实现多文件批量下载

    有时候在系统中需要一次性下载多个文件,但逐个下载文件比较麻烦。这时候,最好的解决办法是将所有文件打包成一个压缩文件,然后下载这个压缩文件,这样就可以一次性获取所有所需的文件了。 下面是一个名为CompressUtil的工具类的代码,它提供了一些方法来处理文件压

    2024年02月06日
    浏览(58)
  • java 批量下载将多个文件(minio中存储)压缩成一个zip包

    我的需求是将minio中存储的文件按照查询条件查询出来统一压成一个zip包然后下载下来。 思路:针对这个需求,其实可以有多个思路,不过也大同小异,一般都是后端返回流文件前端再处理下载,也有少数是压缩成zip包之后直接给下载链接返回到前端,前端收到链接url直接

    2024年02月10日
    浏览(58)
  • Java利用Apache compress包实现文件夹压缩成Zip包

    Apache common提供了很多实用的工具包,下面就说一下如何用compress包来压缩文件夹。先引入compress,io和lang3这3个工具包: 这个方法实现了将文件夹下所有的文件压缩成zip包,并输出到文件流中,可以直接写入到文件或提供给前端下载,工具类如下: 执行main函数跑测试用例,发

    2024年01月20日
    浏览(44)
  • Qt 实现压缩文件、文件夹和解压缩操作zip

    通过Qt自带的库来实现,使用多线程方式,通过信号和槽来触发压缩与解压缩,并将压缩和解压缩结果回传过来。 使用的类: 1、在.pro文件中添加模块gui-private 若未cmake工程,需要在CMakeList.txt中添加 待验证: 1、中文路径,文件名含有中文 2、隐藏文件夹,.dir和…dir,例如:

    2024年02月14日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包