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

2019-07-05 11:10:18 浏览数 (1)

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

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

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

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

分析下原因是因为:

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

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

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

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

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

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

0 人点赞