当前位置: 首页 > news >正文

使用 ZipArchiveInputStream 读取压缩包内文件总数

读取压缩包内文件总数

简介

ZipArchiveInputStream 是 Apache Commons Compress 库中的一个类,用于读取 ZIP 格式的压缩文件。在处理 ZIP 文件时,编码格式是一个重要的问题,因为它决定了如何解释文件中的字符数据。通常情况下,ZIP 文件中的文本文件是以特定的字符编码格式存储的,例如 UTF-8 或 ISO-8859-1。但是,ZIP 规范并没有规定文件的编码格式,因此不同的 ZIP 文件可能使用不同的编码。

ZipArchiveInputStream 允许用户设置编码格式,以正确处理 ZIP 文件中的文件名或文件内容。默认情况下,ZipArchiveInputStream 可能使用 UTF-8 编码来读取文件名,但如果 ZIP 文件中的文件名使用了不同的编码,那么就需要显式地设置正确的编码格式。

例如,如果 ZIP 文件中的文件名使用了 GBK 编码,那么在创建 ZipArchiveInputStream 对象时,需要调用 setEncoding("GBK") 方法来设置正确的编码格式。这样,ZipArchiveInputStream 就能正确地解析文件名,避免乱码问题。

使用 ZipArchiveInputStream 的基本步骤如下:

  1. 创建一个 ZipFile 对象,传入一个 ZIP 文件的 File 对象或 ZIP 文件的路径作为参数。
  2. 通过 ZipFile 对象的 getInputStream 方法获取一个 InputStream 对象,用于读取 ZIP 文件的数据。
  3. 创建一个 ZipArchiveInputStream 对象,传入上一步获取的 InputStream 对象作为参数。
  4. 使用 ZipArchiveInputStream 对象的 getNextEntry 方法来获取 ZIP 文件中的每一个条目(即压缩包内的文件或文件夹),并对其进行处理。可以使用 read 方法读取条目的数据。
  5. 处理完一个条目后,使用 closeEntry 方法关闭该条目。

代码逻辑

public class Test {
    public static void main(String[] args) {
        AtomicInteger atomicInteger = new AtomicInteger(0);
        File file = FileUtil.file("C:\\Users\\a\\Downloads\\train_val_images.zip");
        try (ZipArchiveInputStream inputStream = new ZipArchiveInputStream(new FileInputStream(file),UTF_8)){
            ZipArchiveEntry nextZipEntry;
            while ( (nextZipEntry = inputStream.getNextZipEntry()) != null)
            if (!nextZipEntry.isDirectory()){
                atomicInteger.incrementAndGet();
            }
        }  catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(atomicInteger.intValue());
    }
}

测试效果

在这里插入图片描述
在这里插入图片描述

相关文章:

  • RuoYi-Vue开源项目2-前端登录验证码生成过程分析
  • 记录一次服务器内存使用率过高达到90%告警问题排查。
  • 基于SpringBoot的高校办公室行政事务管理系统
  • 本地虚拟机平台Proxmox VE结合Cpolar内网穿透实现公网远程访问
  • PHP8编译安装
  • C++ map字典
  • 文本处理基本方法
  • 家具工厂5G智能制造数字孪生可视化平台,推进家具行业数字化转型
  • MySQL索引、事务、储存引擎
  • Python 常用内置函数详解(二):print()函数----打印输出
  • 【xr806开发板使用】连接wifi例程实现
  • js封装SDK 在VUE、小程序、公众号直接调用js调用后端接口(本文以vue项目为例)
  • Python深度学习之路:TensorFlow与PyTorch对比【第140篇—Python实现】
  • Android 开机启动的核心系统服务:你了解了吗?
  • Dubbo如何支持集群容错?有哪些集群容错模式?Dubbo的路由策略是怎样的?如何根据路由规则选择服务提供者?
  • Docker常用命令
  • Android学习使用GitLab(保姆级)
  • 算法沉淀——贪心算法四(leetcode真题剖析)
  • 【晴问算法】入门篇—贪心算法—区间不相交问题
  • 力扣由浅至深 每日一题.09 找出字符串中第一个匹配项的下标
  • “科创板八条”后百单产业并购发布,披露交易金额超247亿
  • 洛杉矶奥组委确认2028年奥运会和残奥会开闭幕式场地
  • 一企业采购国产化肥冒充“挪威化肥”:7人被抓获
  • 罗氏制药全新生物制药生产基地投资项目在沪启动:预计投资20.4亿元,2031年投产
  • 昆廷·斯金纳:作为“独立自主”的自由
  • 甘怀真:天下是神域,不是全世界