Java读取.xlsx文件时POIXMLTypeLoader类初始化失败问题求助
关于POI读取xlsx时
Could not initialize class org.apache.poi.ooxml.POIXMLTypeLoader的问题解决 问题描述
我正在编写一个读取.xlsx文件的简单Java程序,代码如下:
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; private String TestWorkbook(File[] excelFiles) { String returnString = null; List<String> numbers = new ArrayList<>(); for (File file : excelFiles) { try (FileInputStream fis = new FileInputStream(file); XSSFWorkbook workbook = new XSSFWorkbook(fis)) { Sheet sheet = workbook.getSheetAt(0); Iterator<Row> rowIterator = sheet.iterator(); if (rowIterator.hasNext()) { rowIterator.next(); } while (rowIterator.hasNext()) { Row row = rowIterator.next(); Cell cell = row.getCell(0); if (cell != null && cell.getCellType() == CellType.STRING) { numbers.add(cell.getStringCellValue()); } } for (String number: numbers ) { System.out.println("number= " + number); } } catch (IOException e) { e.printStackTrace(); } } return returnString = "OK"; }
引入的依赖库版本:
- poi 5.2.5
- poi-ooxml 5.2.5
- poi-ooxml-lite 5.2.5
运行时出现错误:Could not initialize class org.apache.poi.ooxml.POIXMLTypeLoader,请问是代码存在问题还是缺少必要依赖?
问题原因及解决办法
这个错误不是代码问题,核心原因是依赖冲突或缺失,尤其是POI OOXML相关的XML解析依赖未正确引入。
具体解决步骤:
- 移除互斥依赖:
poi-ooxml和poi-ooxml-lite是互斥的——poi-ooxml-lite是轻量版本,不含完整XML解析依赖,poi-ooxml是完整版本。保留其中一个即可,推荐选poi-ooxml(适配更多场景)。 - 确保依赖完整性:POI 5.x版本需要完整的依赖链,如果你用Maven,正确的依赖配置应该是:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.2.5</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.5</version> </dependency>
Gradle配置则是:
implementation 'org.apache.poi:poi:5.2.5' implementation 'org.apache.poi:poi-ooxml:5.2.5'
- 清理缓存并重构建:删除本地仓库中已下载的POI相关依赖,再执行
mvn clean install或gradle clean build,避免缓存的损坏依赖导致问题。
代码小优化建议
你的代码逻辑没问题,可以做两点小调整:
- 用
CellUtil.getCell(row, 0)替代row.getCell(0),空指针处理更简洁; - 把打印
numbers的循环移到外层for循环外面,避免多文件场景下重复打印。
内容的提问来源于stack exchange,提问作者Garinda Burnama
相关产品推荐
相关产品推荐

