【记录】使用 ZipInputStream类getNextEntry方法遇到的错误

82- IO解压缩流、压缩流 解压缩流和压缩流是用于处理文件压缩和解压缩的类。在Java中,主要使用 java.util.zip 包提供的类进行压缩和解压缩操作。 阅读详情

前文描述:

之前公司有一个 .exe 的工具:A:可以把一个文件放进压缩包,B:可以检验被放进压缩包的文件。

现在需要用Java编写一个类似的工具。


1、工具写好之后进行验证时发现:

1)用java代码工具进行AB操作时完全正常。

2)用java代码工具进行A操作用exe工具进行B操作正常。

3)用exe工具进行A操作,用java工具进行B操作抛出异常。异常如下:

java.util.zip.ZipException: invalid entry size (expected 67324752 but got 5896 bytes)
	at java.util.zip.ZipInputStream.readEnd(Unknown Source)
	at java.util.zip.ZipInputStream.read(Unknown Source)
	at java.util.zip.ZipInputStream.closeEntry(Unknown Source)
	at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
	at com.iapppay.apk.mark.tool.util.ToolMain.readMark(ToolMain.java:127)
	at com.iapppay.apk.mark.tool.ui.ReadMarkPanel.getMarkFromApk(ReadMarkPanel.java:86)
	at com.iapppay.apk.mark.tool.ui.ReadMarkPanel.actionPerformed(ReadMarkPanel.java:72)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$400(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

2、问题详细信息:

exe进行A操作的代码:

//拷贝zip文件
            string tmpZipPath = zipFolder + "\\" + mark + "_" + zipFileName;
            System.IO.File.Copy(zipPath, tmpApkPath, true);


            //将mark对应到文件添加到apk
            using (ICSharpCode.SharpZipLib.Zip.ZipFile zip = new ICSharpCode.SharpZipLib.Zip.ZipFile(tmpZipPath)) 
            {
                zip.BeginUpdate();
                zip.Add(markPath, "META-INF\\" + markEnc);
                zip.CommitUpdate();
                zip.Close();
            }

java工具进行B操作的代码:

ZipInputStream zis = new ZipInputStream(new FileInputStream(file));
		ZipEntry entry = null;
		while((entry = zis.getNextEntry()) != null){
			String entryName = entry.getName();
			if(entryName.contains(ChannelUtil.CHANNEL_DIR+ChannelUtil.MARK_FILE_MARKS)){
				break;
			}
		}
		zis.closeEntry();
		zis.close();

3.解决办法:

java工具进行B操作的代码修改为:

ZipFile zipFile = new ZipFile(file);
		Enumeration<? extends ZipEntry> enumeration= zipFile.entries();
		 
		 while(enumeration.hasMoreElements()){
			String entryName = enumeration.nextElement().getName();
			if(entryName.startsWith(ChannelUtil.CHANNEL_DIR+ChannelUtil.MARK_FILE_MARKS)){
				break;
			}
		 }
		 zipFile.close();






Unity跨平台ZIP解压工具类实现:解决invalid zip archive与异步解压难题 在游戏开发与资源管理中,数据压缩是提升传输效率与减少存储空间的关键技术。ZIP作为广泛使用的归档格式,其核心原理基于DEFLATE等压缩算法与中央目录结构,实现对多个文件的打包与还原。在Unity引擎中,由于原生System.IO.Compression存在跨平台限制与同步阻塞问题,开发者常面临资源包导入失败、主线程卡顿等工程挑战。通过集成SharpZipLib等成熟库并进行深度封装,可以构建支持异步操作、路径安全与进度反馈的健壮工具类,有效解决“invalid zip archive: could not 阅读详情

相关推荐

Java POI Zip炸弹检测机制详解:原理、配置与安全实践

在Java后端开发中,文件上传与处理是常见需求,而安全威胁如Zip炸弹攻击常被忽视。Zip炸弹是一种通过极高压缩比构造的恶意文件,旨在耗尽服务器资源,引发拒绝服务。Apache POI库内置了ZipSecureFile安全机制,通过检查最小压缩比率、最大条目大小等阈值来防御此类攻击。理解压缩原理与安全检测逻辑,对于构建健壮的文件处理系统至关重要。本文以POI处理Excel/Word文件时遇到的“Zip bomb detected”错误为切入点,深入解析其检测原理,并提供全局配置、局部调整等实战方案,帮助开发

weixin_34126557的博客 324

Java 解析上传的ZIP包 解决有关 .getNextEntry()为空问题

Java 解析上传的ZIP包 解决有关 .getNextEntry()为空问题

XIAOTONGZHU的博客 2521

CVE-2021-21972漏洞深度剖析:从ZIP Slip原理到企业级防御实战

文件上传功能是Web应用中的常见需求,但其安全实现至关重要。其核心原理涉及服务器接收用户提交的文件,并进行存储或解析。如果缺乏严格的安全校验,攻击者可能利用此功能实现恶意操作,技术价值在于理解并防范由此引发的严重安全风险,例如远程代码执行。典型的应用场景包括企业ERP、CRM等系统的报表导入、模板上传等模块。本文以某友NC Cloud报表系统的CVE-2021-21972漏洞为例,深入解析其如何因ZIP文件解压时的目录遍历缺陷,结合JSP文件上传过滤不严,最终导致无需认证的远程命令执行。文章将探讨该漏洞的完

weixin_34293911的博客 385

java - ZipInputStream.getNextEntry() 是如何工作的?

关于Java ZipInputStream类下getNextEntry方法的介绍

a473916927的博客 2361

Java压缩工具深度对比:zip4j、Apache Commons Compress等四大方案选型指南

文件压缩与解压是数据处理中的基础技术,其核心原理是通过算法减少数据存储空间和传输带宽。在Java生态中,不同的压缩库在性能、功能和支持格式上各有侧重,技术价值体现在提升应用效率、保障数据安全和简化开发流程。常见的应用场景包括Web服务中的文件打包下载、日志归档和通用解压服务。针对ZIP格式处理,zip4j以其友好的API和完整的加密支持脱颖而出;而Apache Commons Compress则凭借其多格式兼容性成为处理异构压缩包的瑞士军刀。本文基于真实生产环境经验,深入剖析了包括JDK原生工具在内的四大主

weixin_34268579的博客 432

软件工程导论考试通关秘籍:太原理工大学历年真题解析(附答案)

本文为太原理工大学《软件工程导论》考试提供高效备考指南,通过解析近六年真题,揭示高频考点如软件生命周期、UML建模和结构化设计等核心模块的命题规律。文章提供真题拆解、实战策略和避坑指南,帮助考生掌握图形转换题和简答题的应答技巧,助力考试通关。

weixin_29233333的博客 227

java closeutils_java.util.zip.ZipOutputStream.close()方法示例

java.util.zip.ZipOutputStream.close()方法关闭ZIP输出流以及被过滤的流。声明以下是java.util.zip.ZipOutputStream.close()方法的声明。public void close() throws IOException异常ZipException – 如果发生ZIP文件错误。IOException – 如果发生I/O错误。前提...

weixin_35057850的博客 403

Windows 11 24H2 系统下,保姆级安装华为 eNSP 模拟器(含依赖软件下载与避坑指南)

本文提供Windows 11 24H2系统下华为eNSP模拟器的完整安装指南,涵盖系统配置调整、依赖软件安装及常见问题解决方案。特别针对新版系统的兼容性问题,提供详细的避坑步骤和优化建议,帮助网络工程师顺利完成eNSP模拟器的部署与使用。

weixin_42567752的博客 428

java zipinputstream_java.util.zip.ZipInputStream.getNextEntry()方法示例

java.util.zip.ZipInputStream.getNextEntry()方法读取下一个ZIP文件条目并将该流定位在条目数据的开头。声明以下是java.util.zip.ZipInputStream.getNextEntry()方法的声明。public ZipEntry getNextEntry()throws IOException返回值下一个ZIP文件条目,如果没有更多条目,则返回...

weixin_28913019的博客 2014

dify工作流的原理

摘要: Dify 工作流是一个基于有向无环图(DAG)的智能任务编排系统,支持多节点(如LLM调用、API工具、条件分支等)的可视化拖拽与流程编排。其核心原理包括执行引擎(解析DAG并管理节点依赖)、上下文变量传递(类Jinja模板的变量引用机制)和状态持久化(存储执行日志与中间结果)。工作流通过事件驱动执行,支持异步任务调度,并与RAG知识库、LLM服务等模块深度集成,最终可发布为API或对话应用。技术栈基于Python(FastAPI+Celery)和PostgreSQL,实现低代码化的AI应用开发。

nbspzs的专栏 2187

【编译原理】LL(1)分析方法 生成语法树(c++实现)

基本流程 输入文法->消除左递归->提取左公共因子->求FIRST集->求FOLLOW集->LL(1)分析表->表驱动的预测语法分析过程->输出语法分析结果和语法树

qq_43417265的博客 1万+

ZipInputStream使用错误

ZipInputStream使用错误

小何的博客 1298

Linux安装Docker(图文解说详细版)

第一步,下载docker 下载地址: https://download.docker.com/linux/static/stable/x86_64/ 这次的演示我们使用docker-18.06.3-ce.tgz 这个版本 第二步,上传到云服务器上面 使用rz命令上传或者fltp工具进行上传 第三步,解压文件 第四步,将解压出来的docker文件复制到 /usr/bin/ 目录下 这么做的目的是将docker交给linux自己去管理,类似spring中的ioc(猜测,非正经知识) cp docker

编码人生 1万+

JAVA_SAE_Fatal_error: Failed startup of context c.s.s.w.SaeWebAppContext{/1/zhgxh,null},/data1/www/h

JAVA_SAE_Fatal_error: Failed startup of context c.s.s.w.SaeWebAppContext{/1/zhgxh,null},/data1/www/htdocs/394/zhgxh/1/zhgxh.war java.lang.IllegalArgumentException at java.util.zip.ZipInputStream.get

上帝已死 2407

AE(自动曝光)调试策略:曝光曲线设计与过曝控制

自动曝光(AE, Auto Exposure)系统是图像质量控制链路中的核心模块之一,其性能直接决定了成像亮度是否稳定、细节是否完整、场景切换是否自然。在现代移动终端影像系统中,AE 不仅需要适应不同光照强度和复杂环境,还需兼顾人脸优先、HDR触发、视频帧率控制等多目标优化需求。本文基于高通 Snapdragon 和 MTK Dimensity 等主流平台的调试经验,系统梳理了 AE 模型设计原则、曝光曲线配置、测光策略选择与过曝抑制机制,并结合典型实战案例,提供可复制的工程落地路径。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3093

下载MNIST数据集并使用python将数据转换成NumPy数组(源码解析)

下载MNIST数据集并使用python将数据转换成NumPy数组首先来分析init_mnist函数接下来继续分析load_mnist函数实现数据集转换的python脚本的代码显示MNIST图像并确认数据 下载MNIST数据集并将数据转换成NumPy数组的Python脚本里面最重要的就是load_mnist函数,其他项目想要调用数据集的话,就可以调用load_mnist函数,得到一个字典类型的数据,字典的值是一个Numpy数组。 这些过程是如何实现的,现在开始逐字逐句分析源码: 在load_mnist函数中第

及时总结 4268

Android开发周报#319:Studio更新与框架优化

Android开发作为移动开发的重要领域,其技术生态持续快速演进。从开发工具链角度看,Android Studio作为官方IDE,其JCEF运行时支持和中文语言包等改进显著提升了开发体验。在框架层面,动态图标主题系统和蓝牙协议栈优化等更新,体现了Android系统对用户体验和性能的持续关注。这些技术演进为开发者带来了更高效的开发工具和更强大的API能力,特别是在多媒体处理和设备兼容性方面。通过ADB增强命令和Gradle构建系统改进,开发者可以进一步优化工作流程。本期的Android Weekly Note

weixin_30701575的博客 373

Autosar代码包初识 2 - 如何编译Vector包内Demo工程

Vetcor autosar代码包Demo工程编译,GreenHills,RH850,Autosar,Davinci COnfigurator

weixin_42412049的博客 5184

Java代码审计实战:任意文件上传漏洞深度剖析与防御

文件上传是Web应用中的基础功能,其安全性直接关系到服务器安全。其核心原理在于服务器对客户端提交的multipart/form-data数据包进行处理,若校验缺失或不当,攻击者可上传恶意文件并执行,从而获取服务器控制权。该漏洞的技术价值在于揭示了“信任边界”的重要性,是检验应用输入验证和数据处理安全性的关键场景。在Java Web开发中,文件上传功能广泛应用于用户头像、富文本编辑器、数据导入等场景,是代码审计的重点关注对象。本文以Java代码审计为切入点,结合Spring Boot框架和MultipartF

weixin_34126557的博客 348

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java压缩解压实战:避坑指南与Apache Commons Compress应用

文件压缩与解压是数据处理中的基础操作,其核心原理是通过特定算法减少数据存储空间或传输带宽。在Java生态中,标准库提供了基础的ZIP处理能力,但在实际工程中常面临中文乱码、内存溢出等挑战。这些问题的解决不仅提升了系统的健壮性,也保障了数据处理的可靠性。Apache Commons Compress作为强大的第三方库,通过统一的API支持多种格式并解决了编码兼容性问题,显著增强了处理复杂压缩场景的能力。在文件上传、日志归档、数据备份等应用场景中,一个健壮的压缩解压模块能有效避免线上故障。本文聚焦于Java压缩

weixin_34195546的博客 362

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

文件魔数校验:从原理到Java实战,构建安全文件上传防线

在Web开发与文件处理中,文件类型校验是保障系统安全与功能稳定的基础环节。其核心原理在于识别文件的真实格式,而非仅依赖用户可轻易修改的后缀名。文件魔数(Magic Number)作为嵌入文件头部的一组特定字节序列,如同文件的“数字指纹”,能够唯一标识其真实格式,例如JPEG文件以`FF D8`开头,PDF文件以`%PDF`开头。这项技术的核心价值在于显著提升校验的可靠性,有效防御通过伪造后缀名进行的攻击,是构建健壮文件上传功能的关键。其典型应用场景包括用户头像上传、文档处理系统以及任何需要接收并处理用户文件

weixin_30236595的博客 427

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

zipinputstream.getnextentry报错IllegalArgumentException

因为使用了7zip进行压缩,换成winrar即可 参见此链接

weixin_42011423的博客 1230

ZipInputStream解压报错java.lang.IllegalArgumentException: MALFORMED

使用jdk自带的zip工具ZipInputStream,去读取使用winrar在中文windows制作出来的zip文件报错。从报错信息“MALFORMED”,第一反应就是文件名解码失败,因为使用winrar制作的zip肯定是符合zip标准格式的,唯一有疑点的就是文件名是中文,然后存储时的编码和解码是的编码不一致。查看ZipInputStream构造函数可以传编码,因此使用。

shuxiaohua的博客 2849

java使用Zip解压

1.使用unzip这个方法进行解压。方法代码如下,其中zipFileName是要解压的文件名,unzipDir是解压后存放的文件位置。这里有两点要注意 (1)zipFileName要是文件的路径,例如文件名为test.zip,存放在F盘的mywork文件夹下,那么这里的zipFileName要为F:\\mywork\test.zip (2)如果压缩文件夹的内部有多个文件,但是in.getNex...

qq_40088443的博客 1019

java zipinputstream,ZipInputStream.getNextEntry()如何工作?

Say we have code like:File file = new File("zip1.zip");ZipInputStream zis = new ZipInputStream(new FileInputStream(file));Let's assume you have a .zip file that contains the following:zip1.ziphello.cw...

weixin_31302909的博客 783
上一篇: 【Android】自定义progressBar和动画显示对号
下一篇: 【记录】【Android】 记录工作中隐式Intent遇到的坑
小牛冲冲冲
博客等级 码龄12年 5粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值