我正在从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"
这些都不起作用。我 查阅了 很多 相关问题,但它们都没有帮助——通常,它们只是说要使用根路径加载文件,而我已经在这样做了。或者从当前目录加载文件(只需加载filename
),我也尝试过了。该文件正在适当的位置以适当的名称编译成JAR文件。
我该如何解决这个问题?
Lifepaths.class
来调用它。话虽如此,为什么getClassLoader()
允许它工作呢?(另外,随意发布一个答案!) - user1131435Lifepaths.getClass()
吗?在 Object 中没有定义这样的静态方法... - PucegetResource(String)
使其正常工作。顺便说一句 - 我总是在static
上下文中遇到问题。问题基本上是获得的类加载器是用于J2SE类的类加载器。您需要访问上下文类加载器,该类加载器适用于应用程序本身。 - Andrew Thompson