我已经创建了一个函数(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();
}
}
问题是,我在行<{1}}
NullPointerException
对于我要打开的文件,名称为“font.spt”,这也是InputStream stream = cl.getResource("res/" + fileName).openStream();
所持有的值。该文件位于项目根目录下的“res”文件夹中,我目前正在使用Eclipse IDE。
我对文件路径的处理方法是错误的,还是其他问题?
回顾一下:fileName
指向“font.spt”,它位于bin目录的“res”文件夹下。
编辑:包含.spt文件的“res”文件夹现在位于项目的“bin”下,而不是根目录下,但我仍然收到错误。当从IDE运行或作为导出的.jar运行时,我仍然得到fileName
,我应该把这些文件放在哪里?有人可以给我一个截图或示例吗?
答案 0 :(得分:3)
默认情况下,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来管理您的构建,这两者都强制/提供与此类似的项目结构。