使用 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());}
}

测试效果

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/747699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取iOS和Android的app下载渠道和相关参数的方式

1. iOS 1.1 Deep Link 作用:Deep Link 允许应用响应特定的链接,直接打开应用内的某个特定内容或页面。这意味着用户可以通过点击一个链接,直接跳转到应用内部的某个具体位置,而不是每次都从应用的首页开始。配置:开发…

代码随想录刷题笔记 Day 52 | 打家劫舍 No.198 | 打家劫舍 II No.213 | 打家劫舍III No.337

文章目录 Day 5201. 打家劫舍&#xff08;No. 198&#xff09;<1> 题目<2> 笔记<3> 代码 02. 打家劫舍 II&#xff08;No. 213&#xff09;<1> 题目<2> 笔记<3> 代码 03.打家劫舍III&#xff08;No. 337&#xff09;<1> 题目<2&g…

H5/微信 Video标签移动端播放问题

一、禁止/阻止/取消默认的全屏播放 亲测&#xff1a; IOS和安卓均有效 <video x5-playsinline"true"playsinline"true"webkit-playsinline"true"x-webkit-airplay"true"x5-video-orientation"portraint"><source…

工智能的迷惑是技术发展的产物

简述&#xff1a; 随着ChatGPT在全球科技舞台上掀起一股热潮&#xff0c;人工智能再次成为了人们关注的焦点。各大公司纷纷紧跟潮流&#xff0c;推出了自己的AI大模型&#xff0c;如&#xff1a;文心一言、通义千问、讯飞星火、混元助手等等&#xff0c;意图在人工智能领域占据…

sqlplus登录卡死无响应异常处理

一、问题描述 通过Sqlplus 访问数据hang死在登录界面&#xff0c;且不能通过CtrlC取消&#xff0c;如下所示&#xff1a; [oracletest01 ~]$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Fri Mar 13 10:41:36 2024 Version 19.3.0.0.0Copyright (c) 198…

Vue多文件学习项目综合案例——购物车,黑马vue教程

一、项目截图 二、主要知识点 vuex的使用json-server的使用json-server --watch index.json三、需要注意的点 json-server 安装成功&#xff0c;查看版本直接报错。安装默认版本埋下的一个坑&#xff0c;和node版本不匹配作者直接安装vuex&#xff0c;默认安装也是版本不匹配…

C语言案例01, 输入两个整数,获得两个数加减乘除的值,持续更新中~

一.题目 /* 输入两个整数,获得两个数加减乘除的值 */ *///头文件 #include <stdio.h>//主方法 int main() {//声明两个int类型的变量int a;int b;//提示用用户输入printf("请输入两个整数!\n");//用scanf 获取a和b在内存中的值scanf("%d%d",&a…

ai智能外呼机器人的功能,机器人对话常用语模板搭建

智能外呼机器人就是用来往外呼出打电话的;经常看到有文章说电话机器人将要代替传统人工话务员、电话销售员要失业了、外呼机器人要颠覆电销革命了等等&#xff0c;我想说的是&#xff0c;目前市场上的电话机器人还远远不能达到&#xff0c;未来几年内也不一定会实现。 下面就简…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Panel)

可滑动面板&#xff0c;提供一种轻量的内容展示窗口&#xff0c;方便在不同尺寸中切换。 说明&#xff1a; 该组件从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含子组件。 说明&#xff1a; 子组件类型&a…

QMI8658芯片I2C驱动开发指南

这个芯片纯国产挺好用的&#xff0c;电路很好设计&#xff0c;我这垃圾焊功&#xff0c;纯手焊&#xff0c;&#xff0c;居然能用。 第一部分 硬件连接 画的很简陋&#xff0c;看看就可以了&#xff0c;这里I2C总线需要接10K上拉没有画出来&#xff0c;这个需要注意一下。 …

树形结构 一篇文章梳理

树形结构是一种非常重要的非线性数据结构&#xff0c;它模拟了具有层次关系的数据模型。在树形结构中&#xff0c; 目录 一、组成元素&#xff1a; 二、树的属性&#xff1a; 深度或高度 度 路径 路径长度 三、树的类型 1 二叉树 2 多叉树 3 完全二叉树 4 满二叉树…

【计算机网络_传输层】UDP和TCP协议

文章目录 1. 重新理解端口号端口号划分netstat指令pidof 2. UDP协议2.1 UDP协议端格式2.2 UDP的特点2.3 UDP的注意事项2.4 基于UDP的应用层协议 3. TCP协议&#xff08;传输控制协议&#xff09;3.1 TCP协议的格式和报头字段3.2 如何解包和分用3.3 理解TCP协议报头3.4 TCP协议的…

day-20 二叉树的层序遍历

思路&#xff1a;利用队列进行广度优先遍历即可 注意点&#xff1a;ArrayList执行remove之后&#xff0c;索引i会立即重排&#xff0c;注意可能越界 code: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeN…

[Java、Android面试]_05_内存泄漏和内存溢出

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&#xff0c;后续会陆续分享出来&#xff0c;感兴趣的朋友可关注收…

Xcode调试Qt 源码

在Mac下使用Xcode 开发Qt程序&#xff0c;由于程序断点或者崩溃后&#xff0c;Qt库的堆栈并不能够正确定位到源码的cpp文件&#xff0c;而是显示的是汇编代码&#xff0c;导致不直观的显示。 加载的其他三方库都是同理。 所以找了攻略和研究后&#xff0c;写的这篇文章。 一&a…

SIP调试之SIPP测试工具

SIPP是针对SIP协议的一个性能测试的命令行工具&#xff0c;可以动态显示测试的统计信息&#xff08;如呼叫速率、延时、消息统计等&#xff09;。用户可以通过XML场景配置文件&#xff0c;自定义模拟各种UAC/UAS测试场景的信令交互流程&#xff0c;可以被用来测试IP话机、SIP代…

【IC设计】Verilog线性序列机点灯案例(二)(小梅哥课程)

文章目录 该系列目录&#xff1a;设计目标设计思路RTL 及 Testbench仿真结果存在的问题&#xff1f;改善后的代码RTL代码testbench代码 仿真结果 案例和代码来自小梅哥课程&#xff0c;本人仅对知识点做做笔记&#xff0c;如有学习需要请支持官方正版。 该系列目录&#xff1a;…

Nexus如何导入jar以及批量导入Maven的本地库目录

上传依赖包到Nexus 服务器的方式有多种, 包含: 1.单个jar上传: 在Nexus管理台页面上传单个jar 2.源码编译上传:在源码项目中使用 Maven的deploy 命令发布 3. 使用脚本批量上传Maven本地库的目录 前言 本篇基于 Nexus 的版本是 nexus-3.55.0-01本方法适用Linux和WindowsWind…

C++中using 和 typedef 的区别

C中using 和 typedef 的区别_typedef using-CSDN博客 在C中&#xff0c;“using”和“typedef”执行声明类型别名的相同任务。两者之间没有重大区别。C中的“Using”被认为是类型定义同义词。此方法也称为别名声明。定义这些别名声明的工作方式类似于使用“using”语句定义C中…

MySQL-HMA 高可用故障切换

本章内容&#xff1a; 了解MySQL MHA搭建MySQL MHAMySQL MHA故障切换 1.案例分析 1.1.1案例概述 目前 MySQL 已经成为市场上主流数据库之一&#xff0c;考虑到业务的重要性&#xff0c;MySQL 数据库 单点问题已成为企业网站架构中最大的隐患。随着技术的发展&#xff0c;MHA…