java直接读取.zip压缩文件ZipEntry.getsize()总是返回-1?

今天在项目中遇到一个问题,有一个需求是需要验证下载的ZIP文件,解压读取ZIP文件夹内部的文件,文件名称以及大小。
网上搜了下,发现,不用解压可以直接读取,代码如下:

image

但是后面发现一个问题,读取的时候总是返回-1 ze.getSize()的值总是-1,可是名字都到了。
找不到法子,着实无奈,后面换了种方式,干脆将文件解压出来之后,在对文件里面的内容进行验证文件名和文件大小好了

image

最后发现,着实繁琐,能不能三两行代码解决问题。

后来又继续网上搜索了半天,问了下同事,又继续搜索,突然之间找到了一种新的解决方式,无比开心!

image
image

分析下原因是因为:

把判断条件由【(ze=zin.getNextEntry())!=null】换成【zipEnum.hasMoreElements ()】

使用了枚举, Enumeration 接口(枚举)。

通常用 Enumeration 中的以下两个方法打印向量中的所有元素:

(1) boolean hasMoreElements(); // 是否还有元素,如果返回 true ,则表示至少含有一个元素

(2) public Object nextElement(); // 如果 Enumeration 枚举对象还含有元素,该方法返回对象中的下一个元素。如果没有,则抛出NoSuchElementException 异常。

总结:遇到问题,换个解决思路,多从互联网搜索可用信息;
相信同事和朋友,实在不行张开嘴巴问一问,或许同事遇到过,不一定要继续填坑,或者再造轮子;即便没遇到过换一个人的思考方式将会是解决问题的方法。

点击阅读原文到博客查看源码!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,188评论 19 139
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 7,110评论 0 4
  • 莽子狗妈咪阅读 1,436评论 0 0
  • 我不需要别人给我未来,我只知道,自己喜欢的东西就一定要靠自己争取,爱他,我就会想尽一切办法和他在一起
    鹤小姐阅读 1,180评论 0 0
  • 2017年2月6号,北京分院的郭安凤院长组织了北京加盟商伙伴的首次聚会,大家一起共享美味的午餐,畅想2017,一起...
    王小红_家庭教育阅读 4,055评论 0 1

友情链接更多精彩内容