Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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资源,返回空指针_Java_Resources - Fatal编程技术网

Java资源,返回空指针

Java资源,返回空指针,java,resources,Java,Resources,我在eclipse的resources文件夹中使用了一个图像,问题是我不知道如何包含它,绝对路径很长,getResource返回一个空指针。我搜索过谷歌等网站,尝试了常用的解决方案,但没有结果。resources文件夹在我的buildpath中,运行代码的类在buildpath中,但以下两个都返回null System.out.println(getClass().getResource("data.txt")); System.out.println(getClass().getResourc

我在eclipse的resources文件夹中使用了一个图像,问题是我不知道如何包含它,绝对路径很长,getResource返回一个空指针。我搜索过谷歌等网站,尝试了常用的解决方案,但没有结果。resources文件夹在我的buildpath中,运行代码的类在buildpath中,但以下两个都返回null

System.out.println(getClass().getResource("data.txt"));
System.out.println(getClass().getResource("/resources/data.txt"));
System.out.println(getClass().getResource("/001.txt"));
现在尝试:

System.out.println(getClass().getResource("001.txt"));
仍然返回null

System.out.println(getClass().getResource("data.txt"));
System.out.println(getClass().getResource("/resources/data.txt"));
System.out.println(getClass().getResource("/001.txt"));
也为空

右键单击文件并查找其相对于工作区的路径(右键单击文件、属性、路径)

也为空

这是工作区和资源文件夹的图像。代码正在“TestSokoban.java”中运行
我甚至担心eclipse没有搜索我的桌面、以管理员身份运行的权限,这仍然是一个问题。

您不使用BufferedReader并将文件读入字符串吗?

getClass().getResource()
读取的是类路径,而不是文件系统路径。因此,您应该从类路径的根使用包/资源表示法。

通过运行
System.out.println(getClass().getResource(“.”),没有什么比找到相对路径的根更容易的了。然后修改路径以正确地匹配相对路径。它应该是类所在的包,顺便说一句。

请记住,eclipse将执行默认情况下
bin
文件夹中的编译代码,或者如果您正在使用
maven
进行项目,则执行
target
文件夹中的编译代码。这意味着您必须构建项目

执行生成后,查看
bin
文件夹并查找文件。这是您必须加载的路径

假设您这样做了,并且资源最终位于
类路径根中,那么标准方法是:

ClassLoader.getSystemResourceAsStream("file.txt");
但如果您仍然有问题,请尝试:

Thread.currentThread().getContextClassLoader().getResourceAsStream("file.txt");

如果您在一个spawn中执行
java类
,后一种形式将对您有所帮助。

您看过[这个答案][1]了吗?似乎是你问题的答案。[1] :图像的文件名有史以来最差。在不知道它在类路径上的位置的情况下,很难提供帮助。下面所有的答案都返回null,我在这里不知所措。想象一下,在组织的不同资源文件夹中有gazzilion图像的项目,我必须找到绝对路径吗?它仍然应该打印出一个对象地址。接受这个作为我的答案,这样做有助于我找到资源文件夹的相对路径。但我仍然觉得,只要给定的文件位于构建路径中的某个位置,.getResource()就会找到该文件,正如OP中的图像所示,resources文件夹是可用的。