Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ClassLoader.getResource()的正确路径?_Java_Classloader_Getresource - Fatal编程技术网

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

Java 使用ClassLoader.getResource()的正确路径?,java,classloader,getresource,Java,Classloader,Getresource,我制作了一个函数(Java),该函数应该从文件中读取字节,并将它们打印到控制台: public void loadPixels(int size){ ClassLoader cl = this.getClass().getClassLoader(); pixels = new byte[size]; try{ InputStream stream = cl.getResource("res/" + fileName).openStream();

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

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”中,我目前正在使用EclipseIDE

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

重述:
fileName
指向“font.spt”,它位于bin目录的“res”文件夹下


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

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

例如,您可能有:

MyProject\
    src\
        java\
            com\
                ....*.java
        resources\
            fonts\
                font.spt
src\java\
src\resources\
都定义为构建路径中的源位置。然后,加载文件的代码如下所示:

getResource("fonts/" + fileName)

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

您可以使用压缩工具打开.jar文件,找到文件所在的路径,或者您是否有web项目?类加载器从类路径加载资源。如果文件位于项目的根目录,Eclipse不会将其编译到输出目录,因此在运行时不在类路径中。如果希望文件在运行时位于类路径中,请将其放在源目录中。使用“res/”+filename,这是否意味着我希望在“src”下创建一个名为“res”的文件夹,然后将文件放在其中?是的。把它放在你的src文件夹中