我正在从我的 Java 项目的已编译 JAR 的包中加载一个文本文件。相关目录结构如下:
/src/initialization/Lifepaths.txt
我的代码通过调用Class::getResourceAsStream返回一个InputStream.
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无论我使用什么,打印出来的内容都会一直打印。我不确定为什么上述方法不起作用,所以我也尝试过:
null
"/src/initialization/Lifepaths.txt"
"initialization/Lifepaths.txt"
"Lifepaths.txt"
该主题的问题,但没有一个有帮助 - 通常,他们只是说使用根路径加载文件,我已经在这样做了。那,或者只是从当前目录加载文件(只是 load filename),我也尝试过。该文件正在以适当的名称编译到适当位置的 JAR 中。
filename
我该如何解决这个问题?
Lifepaths.class.getClass().getResourceAsStream(...)使用系统类加载器加载资源,它显然会失败,因为它看不到你的 JAR
Lifepaths.class.getClass().getResourceAsStream(...)
Lifepaths.class.getResourceAsStream(...)使用加载 Lifepaths 类的相同类加载器加载资源,它应该可以访问 JAR 中的资源
Lifepaths.class.getResourceAsStream(...)