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

Maven项目在IDE可读取资源文件,打包成JAR后无法读取求助

Maven项目打包JAR后无法读取resources资源的问题解决

问题根源

你当前用File类读取资源的方式只适用于文件系统中的真实文件。IDE运行时,resources目录下的文件会被解压到项目编译后的输出目录(比如target/classes),此时是真实的文件路径,所以File能找到;但打包成JAR后,test.txt是JAR归档文件里的一个条目,不是独立文件,File类无法识别这种JAR内部的路径,自然会抛出FileNotFoundException,最终返回null。

修复方案

改用ClassLoader.getResourceAsStream()直接获取资源的输入流,这个方法可以统一处理IDE运行和JAR打包两种场景,无需关心资源的物理存储方式。修改后的代码如下:

import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Main mainTest = new Main();
        System.out.println(mainTest.test());
    }

    private String test() {
        // 直接获取资源的输入流
        try (InputStream is = getClass().getClassLoader().getResourceAsStream("test.txt");
             Scanner scanner = new Scanner(is)) {

            if (is == null) {
                System.err.println("找不到test.txt资源");
                return null;
            }

            String line = "";
            while (scanner.hasNextLine()) {
                line = scanner.nextLine();
            }
            return line;
        } catch (IOException e) {
            // 打印异常信息方便调试
            e.printStackTrace();
        }
        return null;
    }
}

额外注意点

  • 原代码中catch块里只调用了e.getMessage()但没有做任何输出,导致异常发生时你看不到错误信息,建议改成e.printStackTrace()或者记录日志,方便排查问题。
  • 要确保test.txt确实被打包进了JAR包:Maven默认会把src/main/resources下的文件打包到JAR的根目录,如果你修改过Maven的资源配置,需要检查pom.xml里的<resources>配置是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:39:36