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

Maven命令行运行项目时触发java.io.FileNotFoundException异常

解决Maven命令行执行时Excel文件找不到的问题

核心原因

Eclipse默认工作目录是项目根目录,但Maven命令行执行时,默认工作目录是你执行mvn命令所在的路径(如果是多模块项目,子模块下执行命令的话工作目录是子模块根目录);另外直接用文件名读取时,Eclipse和Maven的路径解析逻辑也存在差异。

解决方案

1. 用类加载器读取资源目录文件

把Excel文件放到src/main/resources目录下,Maven打包时会自动将该目录下的文件复制到target/classes中,代码通过类加载器读取,彻底规避路径问题:

// 读取resources下的Excel文件
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("test.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);

这种方式不管是Eclipse运行还是Maven命令行执行,都能从classpath中正确加载文件。

2. 确认Maven执行的工作目录

执行mvn命令前,先通过pwd(Linux/macOS)或cd(Windows)确认当前工作目录,然后将Excel文件放到该目录下,或者在代码中使用相对路径指向文件:
比如你在项目根目录执行命令,文件放在根目录,代码里直接写new File("test.xlsx")即可;如果在子模块目录执行,文件在父项目根目录,就用new File("../test.xlsx")。

3. 配置Maven exec插件指定工作目录

如果需要固定工作目录,可在pom.xml的exec-maven-plugin中配置workingDirectory,强制命令行执行时的工作目录为项目根目录:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <mainClass>com.yourpackage.YourMainClass</mainClass>
        <!-- 指定工作目录为项目根目录 -->
        <workingDirectory>${project.basedir}</workingDirectory>
    </configuration>
</plugin>

4. 排查路径问题的调试代码

在代码中添加以下输出,快速定位问题所在:

// 打印当前工作目录
System.out.println("当前工作目录:" + new File(".").getAbsolutePath());
// 检查文件状态
File excelFile = new File("test.xlsx");
System.out.println("文件是否存在:" + excelFile.exists());
System.out.println("文件绝对路径:" + excelFile.getAbsolutePath());

通过这些输出可以明确是文件位置不对,还是工作目录不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 18:22:17