一尘不染

Java getResourceAsStream返回null

java

我正在从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的适当位置。

我该如何解决?


阅读 463

收藏
2020-02-28

共1个答案

一尘不染

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

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

2020-02-28