ZipFile.entries() 返回Enumeration用于遍历ZIP条目,需用hasMoreElements()/nextElement()获取每个ZipEntry,getName()得内部路径,isDirectory()区分目录与文件,getInputStream()读内容,须及时close资源。

用 ZipFile.entries() 遍历 ZIP 包内所有文件,核心是获取一个 Enumeration extends ZipEntry>,再逐个取出 ZipEntry 对象来读取名称、类型、大小等信息。
基础遍历:列出所有条目名称
这是最常用场景,只需打开 ZIP 文件、调用 entries()、循环提取 getName() 即可:
- 确保 ZIP 文件路径正确且存在,否则构造
ZipFile会抛IOException -
entries()返回的是枚举,必须用hasMoreElements()+nextElement()配合使用 - 每个
ZipEntry的getName()返回的是 ZIP 内部路径(含目录结构),如"docs/readme.txt"或"images/logo.png" - 记得在遍历结束后调用
zipFile.close(),避免资源泄漏
区分文件与目录
ZIP 中的目录条目以 / 结尾,可通过 entry.isDirectory() 判断:
- 返回
true表示该条目是目录(如"src/main/java/") - 返回
false表示普通文件(如"pom.xml") - 注意:有些 ZIP 工具不显式存储目录条目,此时仅靠文件路径中的
/分隔符推断层级
统计或筛选特定文件
可在遍历时加入逻辑判断,比如统计 .class 文件数量或收集所有 JSON 文件路径:
- 用
fileName.endsWith(".json")判断后缀 - 用
entry.getSize()获取未压缩大小(-1 表示未知,常见于流式写入的 ZIP) - 计数时无需保存 entry,直接递增变量即可
- 收集路径可用
List存储entry.getName()
读取某个文件的内容
若需读取具体文件内容,要用 zipFile.getInputStream(entry):
- 必须在
ZipFile未关闭的前提下调用,否则抛IllegalStateException - 推荐用
try-with-resources管理InputStream,防止流未关闭 - 读取文本建议指定字符集,例如
new String(bytes, StandardCharsets.UTF_8) - 大文件不宜一次性读入内存,应分块处理










