小编典典

getResourceAsStream 返回 null

all

我正在从我的 Java 项目的已编译 JAR 的包中加载一个文本文件。相关目录结构如下:

/src/initialization/Lifepaths.txt

我的代码通过调用Class::getResourceAsStream返回一个InputStream.

public class Lifepaths {
    public static void execute() {
        System.out.println(Lifepaths.class.getClass().
            getResourceAsStream("/initialization/Lifepaths.txt"));
    }

    private Lifepaths() {}

    //This is temporary; will eventually be called from outside
    public static void main(String[] args) {execute();}
}

null无论我使用什么,打印出来的内容都会一直打印。我不确定为什么上述方法不起作用,所以我也尝试过:

  • "/src/initialization/Lifepaths.txt"
  • "initialization/Lifepaths.txt"
  • "Lifepaths.txt"

该主题的问题,但没有一个有帮助 - 通常,他们只是说使用根路径加载文件,我已经在这样做了。那,或者只是从当前目录加载文件(只是
load filename),我也尝试过。该文件正在以适当的名称编译到适当位置的 JAR 中。

我该如何解决这个问题?


阅读 109

收藏
2022-06-06

共1个答案

小编典典

Lifepaths.class.getClass().getResourceAsStream(...)使用系统类加载器加载资源,它显然会失败,因为它看不到你的
JAR

Lifepaths.class.getResourceAsStream(...)使用加载 Lifepaths 类的相同类加载器加载资源,它应该可以访问
JAR 中的资源

2022-06-06