java相对路径

使用下面的代码段会抛出一个空指针exception,但我找不到原因:

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

在此处输入图像描述

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

谢谢!

getResource 通过类加载器进行搜索 ,因此通常在类路径中进行简化。 src文件夹不在类路径中 – 它仅用于构建。 根据您的构建系统(ANT,Maven,IDE内部),资源文件夹可能会合并到类路径中。 您将资源直接放入源文件夹中也是可行的(如果构建过程将所有非Java资源复制到类输出文件夹,或者源文件夹用于生成的类的输出)。

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

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

您似乎正在使用NetBeans?

只需创建一个名为src\resources的文件夹,在其中获取文件,然后调用this.getClass().getResource("lib.txt");

Netbeans将在构建时正确打包,资源将位于jar内的主文件夹中,因此您无需指定其文件夹即可获得。

您应该只提供类加载点的相对路径(即没有src ):

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