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

Maven项目引入Apache POI后报错:Log4j API无法找到日志提供器

解决:Log4j API找不到日志提供者 + POI文件读取问题

问题根源

  • 日志依赖不全:Apache POI 5.4.0底层依赖Log4j 2 API,但你仅引入了poi-ooxml依赖,未配置具体的Log4j实现类,导致运行时抛出“Log4j API could not find a logging provider”错误。
  • 文件路径错误:代码中File对象指向的是桌面文件夹(C:/Users/dell/OneDrive/Desktop),而非具体的Excel文件(如test.xlsx),这会直接导致FileInputStream读取失败,后续Workbook创建也会报错。

解决步骤

1. 补全Log4j日志实现依赖

在Maven的pom.xml中添加Log4j核心实现依赖,解决日志提供者缺失问题:

<!-- Log4j 2核心实现,必须添加 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.20.0</version>
</dependency>
<!-- 可选:若项目使用SLF4J日志框架,添加该桥接包避免日志冲突 -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j2-impl</artifactId>
    <version>2.20.0</version>
</dependency>

2. 修正代码中的文件路径与资源管理

将File对象指向具体的Excel文件,并使用try-with-resources语法自动关闭流和Workbook,避免资源泄漏:

// 替换为你实际的Excel文件路径,例如test.xlsx
File file = new File("C:/Users/dell/OneDrive/Desktop/test.xlsx");
// try-with-resources会自动关闭实现AutoCloseable接口的资源
try (FileInputStream stream = new FileInputStream(file);
     Workbook workbook = WorkbookFactory.create(stream)) {
    Sheet sheet0 = workbook.getSheetAt(0);
    if (sheet0 == null) {
        System.out.println("第一个工作表不存在");
        return;
    }
    Row row0 = sheet0.getRow(0);
    if (row0 != null) {
        Cell cellA = row0.getCell(0);
        System.out.println(cellA != null ? cellA : "A1单元格为空");
    } else {
        System.out.println("第一行数据不存在");
    }
} catch (IOException e) {
    e.printStackTrace();
}

额外说明

  • Log4j版本选择2.20.0完全兼容POI 5.4.0依赖的Log4j API 2.19.0。
  • try-with-resources是Java 7+的特性,能确保资源被正确关闭,比手动调用close()更安全可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:13:23