You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache POI读取XLS文件抛出UnsupportedZipFeatureException的解决方法

解决Apache POI读取Excel文件时的UnsupportedZipFeatureException问题

问题根源

该错误核心原因是Apache Commons Compress库版本过低,不支持目标Excel(XLSX本质为ZIP压缩包)使用的压缩算法;同时原有代码仅适配XLSX格式、未处理旧版XLS,且存在资源泄漏问题,可能导致后续读取失败。

解决方案

1. 升级Apache Commons Compress依赖

在pom.xml中显式添加高版本commons-compress依赖,覆盖POI默认的低版本,以支持更多压缩算法:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.24.0</version>
</dependency>

2. 兼容XLS/XLSX格式并修复资源泄漏

替换原有代码,使用WorkbookFactory自动识别文件类型,同时通过try-with-resources自动释放资源:

import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

public List<String> getSheetNames(String fileLocation) throws Exception {
    List<String> sheetNames = new ArrayList<>();
    try (FileInputStream file = new FileInputStream(new File(fileLocation));
         Workbook workbook = WorkbookFactory.create(file)) {
        int sheetCount = workbook.getNumberOfSheets();
        for (int i = 0; i < sheetCount; i++) {
            sheetNames.add(workbook.getSheetName(i));
        }
    } catch (Exception e) {
        throw new RuntimeException("读取Excel文件失败: " + fileLocation, e);
    }
    return sheetNames;
}

3. 检查文件有效性

  • 手动用Excel打开报错文件,确认是否损坏,若正常则重新保存为标准XLS/XLSX格式
  • 排查文件是否由第三方工具生成、或被特殊压缩工具处理过(如启用ZIP64或罕见压缩算法)

4. 校验依赖完整性

执行mvn dependency:tree命令检查依赖树,确保poi、poi-ooxml版本一致,且无commons-compress的版本冲突。

内容的提问来源于stack exchange,提问作者Jayz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:06:27