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

如何构建包含resources文件夹下外部文件的可执行Jar包

问题原因

打包成Jar文件后,资源文件是Jar包内部的压缩条目,不属于操作系统文件系统中的独立文件,你原有代码中使用File类读取资源路径的方式仅适用于本地未打包的开发环境,无法读取Jar包内的资源,因此会抛出FileNotFoundException。

解决方案

直接通过类或类加载器获取资源的输入流,无需走文件系统读取,修改后的代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Main main = new Main();
        main.readFile("test.txt");
    }

    public void readFile(String fileName){
        // 直接获取资源输入流,适配Jar包内资源读取
        try(Scanner scanner = new Scanner(getClass().getResourceAsStream("/" + fileName))){
            while (scanner.hasNextLine()){
                System.out.println(scanner.nextLine());
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

额外注意事项

  • 路径前缀/表示从ClassPath根路径读取资源,对应你项目中resources目录下的根位置,如果你将文件放在resources的子目录中,需要补充对应路径,比如/config/test.txt。
  • 打包完成后可以解压Jar包确认资源位置,确保test.txt在Jar包的根目录下,如果Jar包内多了一层resources目录,说明你打包配置错误,需要调整IDEA的打包规则,将resources目录下的内容直接输出到Jar根目录,而不是把resources目录本身打包进去。
  • 可提前判断输入流是否为null,避免资源不存在时抛出空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:03