3

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

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"));

也为空。

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

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

也为空

这是工作区和资源文件夹的图像。代码是从“TestSokoban.java”运行的, 构建路径 工作区 我什至担心eclipse没有权限搜索我的桌面,以管理员身份运行,仍然是同样的问题。

4

4 回答 4

2

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

于 2013-02-25T22:33:56.823 回答
0

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

于 2013-02-25T22:28:14.033 回答
0

请记住,如果您用于项目,eclipse 将执行bin默认情况下位于文件夹或文件夹中的编译代码。这意味着您必须构建项目。targetmaven

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

假设您这样做了,并且资源以标准方式结束,classpath root那么标准方式是:

ClassLoader.getSystemResourceAsStream("file.txt");

但是,如果您仍然遇到问题,请尝试:

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

如果您java class在生成中执行,后一种形式将对您有所帮助。

于 2013-02-25T22:35:50.450 回答
-1

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

于 2013-02-25T22:24:56.023 回答