Java加载.xls文件未识别 相对/绝对路径均运行失败问题
问题现象
尝试加载存放在同级目录下的.xls文件时运行失败,改用绝对路径尝试也无法正常生效。
出现问题的代码如下:
public class Main { public static void main(String[] args) throws FileNotFoundException, IOException { // 相对路径写法 FileInputStream f = new FileInputStream("MP.xls"); HSSFWorkbook l = new HSSFWorkbook(f); } } public class Main { public static void main(String[] args) throws FileNotFoundException, IOException { // 绝对路径写法 FileInputStream f = new FileInputStream("C:\\Users\\alumno.Alumno-PC\\Documents\\NetBeansProjects\\pruebas xlsx\\src\\pruebasxlsx\\MP.xls"); HSSFWorkbook l = new HSSFWorkbook(f); } }
错误日志
相对路径执行报错
Exception in thread "main" java.io.FileNotFoundException: MP.xls (系统找不到指定的文件) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:216) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:111) at pruebasxlsx.Main.main(Main.java:22)
绝对路径执行报错
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/math3/util/ArithmeticUtils at org.apache.poi.poifs.property.RootProperty.setSize(RootProperty.java:59) at org.apache.poi.poifs.property.DirectoryProperty.<init>(DirectoryProperty.java:52) at org.apache.poi.poifs.property.RootProperty.<init>(RootProperty.java:31) at org.apache.poi.poifs.property.PropertyTable.<init>(PropertyTable.java:58) at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:99) at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:272) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:399) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:381) at pruebasxlsx.Main.main(Main.java:24) Caused by: java.lang.ClassNotFoundException: org.apache.commons.math3.util.ArithmeticUtils at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 9 more
修复方案
- 相对路径读取失败:Java项目中
FileInputStream读取相对路径的起点是项目启动的工作目录,不是代码文件所在目录。如果文件存放在类路径下,使用getResource()方法读取即可,参考代码:
public class Main { public static void main(String[] args) throws Exception { URL xlsUrl = Main.class.getClassLoader().getResource("MP.xls"); if (xlsUrl == null) { throw new IllegalArgumentException("类路径下未找到MP.xls文件"); } try (FileInputStream fis = new FileInputStream(new File(xlsUrl.toURI())); HSSFWorkbook workbook = new HSSFWorkbook(fis)) { // 后续业务逻辑 } } }
- 依赖缺失报错:日志明确提示缺少
org.apache.commons.math3.util.ArithmeticUtils类,属于Apache Commons Math3组件。你需要将对应版本的commons-math3 jar包添加到项目的依赖库中,Maven项目可直接引入如下配置:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-math3</artifactId> <version>3.6.1</version> </dependency>
内容的提问来源于stack exchange,提问作者Carlosz
相关产品推荐
相关产品推荐

