2012-02-27 88 views
1

使用下面的代码片段我抛出一个空指针异常,但我找不到理由:java的相对路径

String path = ResourcesLoader.class.getResource("src/i3d/resourcesloader/libraries/lib.txt").toString(); 

enter image description here

现在用我的getResources错了吗?我甚至试图输入完整的路径,如“D:\ Workspace ...”,双反斜杠,双正斜杠,但我得到空指针异常。我没有尝试过的唯一的事情是使用java的路径分隔符,但是这个时候在Windows上运行时应该不是问题。我错过了什么?

谢谢!

+1

什么I3D/resourcesloader /库/ lib.txt – nidhin 2012-02-27 14:28:25

+0

如果去掉SRC部分从您的路径会发生什么? – 2012-02-27 14:29:19

+0

只需使用/libraries/lib.txt – Kayser 2012-02-27 14:33:01

回答

3

getResourcesearches via the classloader,所以通常在类路径简化。 src文件夹不在类路径中 - 它只存在于构建中。根据您的构建系统(ANT,Maven,IDE内部),资源文件夹可能会合并到类路径中。将资源直接放入源文件夹中,该文件夹也可以工作(如果构建过程将所有非Java资源复制到类输出文件夹,或者源文件夹用于生成类的输出)。

/是你的资源的根,如果你使用绝对资源位置。它相当于src文件夹中的根/i3d/resourcesloader/libraries/lib.txt将是访问资源的正确方法。

将构建工具合并的单独文件夹中的资源分开会更好(例如,在Maven中:/src/main/java/src/main/resources)。

+0

'/ i3d/resourcesloader/libraries/lib.txt'工作得很好,thx。 – MRM 2012-02-28 09:32:28

+0

......它看起来像如果我使用'/ I3D/resourcesloader /库/ lib.txt'我不能把这个字符串到一个文件的构造,因为它就像它创建一个空文件,不能与现有的连接处那个地址。相反,如果我在File构造函数中使用'src/i3d/resourcesloader/libraries/lib.txt',它会读取现有的文件。我很困惑! – MRM 2012-02-28 11:54:48

+0

'getResource'返回一个'URL'。使用这个,不要'toString'。更好的是:在大多数情况下,您只需使用'getResourceAsStream',不需要任何手动处理文件句柄。 – 2012-02-28 13:08:29

1

看来你使用的是NetBeans?

只需创建一个名为src\resources的文件夹,将文件放在那里,然后致电this.getClass().getResource("lib.txt");

建设时,NetBeans将包装,妥善和资源将在罐内的主文件夹,这样你就可以不必指定他们的文件夹中获得。

+0

我已经试过你的方式,但它似乎简化版,要查找的文件;还有空指针。使用'/ i3d/resourcesloader/libraries/lib.txt'可以工作。 – MRM 2012-02-28 09:27:23

1

你应该只提供相对路径从你的类加载点(不src IE):

String path = ResourcesLoader.class.getResource("/i3d/resourcesloader/libraries/lib.txt").toString();