用poi读取ws的ppt文件时,会抛出org.apache.poi.poifs.filesystem.POIFSFileSystem.getRoot()Lorg...

使用POI读取PPT文件时遇到异常,通过调整依赖顺序解决了问题。具体步骤是在项目属性中将POI的包移至依赖列表顶部。
用poi读取ws的ppt文件时,会抛出org.apache.poi.poifs.filesystem.POIFSFileSystem.getRoot()Lorg/apache/poi/poifs/filesystem/DirectoryNode;的异常。(使用版本poi-3.0.2)。

解决办法是,打开项目的properties->java build path->order and export,发现poi放到了最后,把poi的包移到最上面。问题解决!
在使用 Apache POI 处理 Excel 文件,如果出现 `java.lang.NoSuchMethodError` 异常,并且异常信息指向 `org.apache.poi.poifs.filesystem.POIFSFileSystem` 的构造函数,例如: ``` java.lang.NoSuchMethodError: org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(Ljava/io/File;)V ``` 这通常表示项目中使用的 Apache POI 版本之间存在不兼容问题。具体来说,该构造函数在某些版本中已被移除或更改,导致运行找不到预期的方法。 ### 原因分析 Apache POI 在不同版本中对类和方法的结构进行了调整。例如,在较早版本(如 3.15 及之前)中,`POIFSFileSystem` 支持直接通过 `File` 对象构造实例[^1]。然而,在更新的版本中(如 4.x 系列),此类构造函数被弃用或完全移除,取而代之的是使用 `FileInputStream` 或其他流方式来初始化文件系统对象[^2]。 ### 解决方案 #### 方法一:统一依赖版本 确保项目中所有 Apache POI 模块的版本一致。不同模块之间若版本不一致可能导致此类错误。例如,若使用 `poi-4.1.2.jar`,则配套的 `poi-ooxml`、`poi-scratchpad` 等也应为相同版本。 #### 方法二:修改代码以适配新版本 API 如果你正在使用 Apache POI 4.x 或更高版本,则应避免直接使用 `new POIFSFileSystem(File file)` 这种方式。改用以下方式打开 `.xls` 文件: ```java import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.FileInputStream; import java.io.File; public class ExcelReader { public static void main(String[] args) throws Exception { File file = new File("example.xls"); try (FileInputStream fis = new FileInputStream(file)) { HSSFWorkbook workbook = new HSSFWorkbook(fis); // 继续处理workbook } } } ``` 对于低版本(如 3.17 及更早),仍可使用如下方式: ```java try (POIFSFileSystem fs = new POIFSFileSystem(new File("example.xls"))) { HSSFWorkbook workbook = new HSSFWorkbook(fs); // 处理workbook } ``` #### 方法三:降级 Apache POI 版本 如果项目依赖较多旧版 API,短期内难以升级代码,可以考虑将 Apache POI 回退到 3.17 或更早版本,以恢复对原有构造函数的支持。 --- ### 相关建议 - 使用 Maven 或 Gradle 管理依赖,检查 `pom.xml` 或 `build.gradle` 中是否指定了统一的 POI 版本。 - 使用 IDE(如 IntelliJ IDEA 或 Eclipse),可通过“Maven Dependency Analyzer”等工具检测版本冲突。 - 查阅 [Apache POI 官方文档](https://poi.apache.org/docs/) 获取最新的 API 使用方式和迁移指南。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值