gpt4 book ai didi

Java:无法弄清楚如何使用 class.getClassLoader().getResourceAsStream() 因此它在我构建工件时可以工作

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:19 26 4
gpt4 key购买 nike

我的任务是为我的一个 friend 开发一个不和谐的机器人,并且需要从文件中加载一些字符串。现在,为了在我将项目导出到 jar 时使其工作,有人告诉我使用 class.getClassLoader().getResourceAsStream()

经过 2 个小时的摆弄,阅读文档并再次询问,我让它在 intelliJ 中工作。但当我构建项目时它仍然不起作用。

Project Structure我的代码:

static final ArrayList<String> QUOTES = new ArrayList<>();

public static void loadArray() {
try{
//File fin = new File("src/main/java/com/github/MarvelousAdain/Quotes");
//FileInputStream fis = new FileInputStream(fin);
System.out.println("Called loadArray Method");
BufferedReader br = new BufferedReader(new InputStreamReader(Utilities.class.getClassLoader().getResourceAsStream("Quotes")));

String line;
while ((line = br.readLine()) != null) {
QUOTES.add(line);
}
System.out.println("Quotes loaded, no Problem.");
br.close();
}catch(IOException e){e.printStackTrace();}
}

如果我尝试在 jar 中运行代码,则会抛出 NullPointerException。

堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException
at java.io.Reader.<init>(Unknown Source)
at java.io.InputStreamReader.<init>(Unknown Source)
at com.github.MarvelousAdain.Utilities.loadArray(Utilities.java:31)
at com.github.MarvelousAdain.Main.main(Main.java:18)

非常感谢您的帮助。

最佳答案

创建 jar 的工具是否包含资源?

您可以检查

jar tf myjar.jar

或者确实是您最喜欢的 zip 工具。

特别的是,getResourceAsStream() 返回 null,而不是像普通 API 那样抛出某种 IOException

另请注意,ClassLoader.getResourceAsStream 将采用相对于类路径的名称,但 Class.getResourceAsStream 将使用指定类的包名称修改路径(即与 .class 文件位于同一“目录”中)。

关于Java:无法弄清楚如何使用 class.getClassLoader().getResourceAsStream() 因此它在我构建工件时可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53960345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com