gpt4 book ai didi

java - 使用 ClassLoader.getResource() 的正确路径?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:11:04 26 4
gpt4 key购买 nike

我创建了一个函数 (Java),它应该从文件中读取 bytes 并将它们打印到控制台:

public void loadPixels(int size){
ClassLoader cl = this.getClass().getClassLoader();
pixels = new byte[size];
try{
InputStream stream = cl.getResource("res/" + fileName).openStream();
stream.read(pixels);
System.out.println(pixels.toString());
stream.close();
}catch(Exception e){
e.printStackTrace();
}
}

问题是,我在线上遇到了一个NullPointerException

InputStream stream = cl.getResource("res/" + fileName).openStream();

对于我要打开的文件,名称是“font.spt”,这也是 fileName 所持有的值。该文件位于项目根目录的“res”文件夹中,我目前使用的是 Eclipse IDE。

我处理文件路径的方法是错误的,还是其他问题?

回顾一下:fileName指向“font.spt”,它在bin目录下的“res”文件夹下。

编辑:包含 .spt 文件的“res”文件夹现在位于项目的“bin”下,而不是根目录下,但我仍然遇到错误。从 IDE 运行或作为导出的 .jar 运行时,我仍然得到 NullPointerException,我应该将这些文件放在哪里?有人可以给我截图或示例吗?

最佳答案

默认情况下,Eclipse 会在构建时将它在项目的源位置中找到的所有非 .java 文件复制到输出文件夹。因此,一种选择是将资源文件与源代码一起放在源文件夹下。但是,更好的选择是为非 Java 文件使用单独的 resources 文件夹,并将其声明为额外的源位置(通过项​​目的 Java Build Path 属性)。这也是 Maven 和 Gradle 项目的组织方式。

例如,您可能有:

MyProject\
src\
java\
com\
....*.java
resources\
fonts\
font.spt

src\java\src\resources\ 都定义为构建路径中的源位置。然后你加载文件的代码将是这样的:

getResource("fonts/" + fileName)

需要考虑的事项:使用 Gradle 或 Maven 来管理您的构建,无论如何,这两者都强制/提供与此类似的项目结构。

关于java - 使用 ClassLoader.getResource() 的正确路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28283749/

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