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
相关产品推荐
相关产品推荐

