2013-02-25 80 views
3

我在eclipse中的资源文件夹中有一个图像,我使用的问题是我不知道如何包含它,绝对路径很长,getResource返回一个空指针。我搜索谷歌和SO,并尝试通常的解决方案无济于事。资源文件夹位于我的构建路径中,我正在运行代码的类位于构建路径中,但以下两个都返回null。Java资源,返回空指针

System.out.println(getClass().getResource("data.txt")); 
System.out.println(getClass().getResource("/resources/data.txt")); 

现在尝试:

System.out.println(getClass().getResource("001.txt")); 

还是返回null。

System.out.println(getClass().getResource("/001.txt")); 

也为null。

右键单击该文件,其路径相对于寻找到工作区(右键单击文件,属性,路径)

System.out.println(getClass().getResource("/ovinger/resources/sokoban_levels/001.txt")); 

也为空

这里是工作空间和资源文件夹中的图片。该代码正在运行“TestSokoban.java” Buildpath Workspace 我甚至担心日食缺乏搜索我的桌面,运行管理员,仍然是同样的问题的权利。

+0

你看过[这个回答] [1]?看起来像你的问题的答案。 [1]:http://stackoverflow.com/questions/2343187/loading-resources-using-getclass-getresource – DigCamara 2013-02-25 22:24:53

+2

永远图像更糟糕的文件名。不知道它在类路径上的位置,很难提供帮助。 – 2013-02-25 22:26:58

+0

下面的所有答案都返回null,我在这里很茫然。想象一下在不同资源文件夹中为gazzilion图像进行组织的项目,我是否必须找到绝对路径? – arynaq 2013-02-25 22:57:21

回答

2

没有什么比通过运行System.out.println(getClass().getResource("."));找出相对路径的根位置更容易了。然后修改路径以适当地适应相对路径。它应该是该类所在的包,顺便说一句。

+0

接受这个作为我的答案,因为这样做帮助我找到资源文件夹的相对路径。尽管如此,我仍然觉得.getResource()会在您的构建路径中找到任何给定的文件,因为OP中的图像显示资源文件夹是。 – arynaq 2013-02-26 12:47:43

-1

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

+0

它应该仍然打印出一个对象地址。 – 2013-02-25 22:26:55

0

getClass().getResource()从类路径读取,而不是文件系统路径。所以,你应该使用来自classpath根目录的包/资源符号。

0

请记住,如果您使用maven作为项目,eclipse将执行编译的代码,默认情况下该文件夹位于bin文件夹或target文件夹。这意味着你必须建立这个项目。

执行构建后,查看bin文件夹并查找该文件。这是你必须加载的路径。

假设你这样做,而且该资源在classpath root然后结束了标准的方式是:

ClassLoader.getSystemResourceAsStream("file.txt"); 

但是,如果你仍然有问题,那么尝试使用:

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

的后一种形式会帮助你,如果你正在执行一个产卵中的java class