java相对路径

java相对路径,java,relative-path,Java,Relative Path,使用下面的代码段会引发空指针异常,但我找不到原因: String path = ResourcesLoader.class.getResource("src/i3d/resourcesloader/libraries/lib.txt").toString(); 我使用的getResources错误吗?我甚至尝试输入完整的路径,比如“D:\Workspace…”,双反斜杠,双前斜杠,但我得到了空指针的例外。我唯一没有尝试过的就是使用java的路径分隔符,但现在这应该不是问题,因为它在Windo

使用下面的代码段会引发空指针异常,但我找不到原因:

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

我使用的
getResources
错误吗?我甚至尝试输入完整的路径,比如“D:\Workspace…”,双反斜杠,双前斜杠,但我得到了空指针的例外。我唯一没有尝试过的就是使用java的路径分隔符,但现在这应该不是问题,因为它在Windows上运行。我错过了什么


谢谢

您似乎正在使用NetBeans

只需创建一个名为
src\resources
的文件夹,将文件放入其中,然后调用
this.getClass().getResource(“lib.txt”)


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

您似乎正在使用Netbeans

只需创建一个名为
src\resources
的文件夹,将文件放入其中,然后调用
this.getClass().getResource(“lib.txt”)


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

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


您应该只提供从类加载点开始的相对路径(即不带
src
):

getResource
,因此在类路径中是典型的和简化的。
src
文件夹不在类路径中–它只存在于生成中。根据您的构建系统(ANT、Maven、IDE internal),资源文件夹可能会合并到类路径中。您可以将资源直接放入源文件夹,该文件夹也可以工作(如果构建过程将所有非Java资源复制到类输出文件夹,或者如果源文件夹用于生成类的输出)


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

最好将资源分离到一个单独的文件夹中,该文件夹由构建工具合并(例如,在Maven中:
/src/main/java
/src/main/resources
)。

getResource
,因此在类路径中是典型和简化的。
src
文件夹不在类路径中–它只存在于生成中。根据您的构建系统(ANT、Maven、IDE internal),资源文件夹可能会合并到类路径中。您可以将资源直接放入源文件夹,该文件夹也可以工作(如果构建过程将所有非Java资源复制到类输出文件夹,或者如果源文件夹用于生成类的输出)


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


最好将资源分离到一个单独的文件夹中,该文件夹由构建工具合并(例如在Maven中:
/src/main/java
/src/main/resources
).

如果从路径中删除src部分,会发生什么?如果从路径中删除src部分,会发生什么?如果从路径中删除src部分,会发生什么?我尝试过你的方法,但似乎找不到文件;仍然是空指针。不过,使用
/i3d/resourcesloader/libraries/lib.txt也行。我尝试过你的方法,但似乎找不到文件;仍然是空指针。但是使用
/i3d/resourcesloader/libraries/lib.txt
很有效。
/i3d/resourcesloader/libraries/lib.txt
效果很好,thx…看起来如果我使用
/i3d/resourcesloader/libraries/lib.txt
我无法将字符串传递给文件构造函数,因为它的行为就像创建了一个空文件,不与该地址的现有地址链接。相反,如果我在文件构造函数中使用
src/i3d/resourcesloader/libraries/lib.txt
,它将读取现有的。我糊涂了
getResource
返回一个
URL
。使用此选项,不要
toString
it。更好的是:在大多数情况下,您只需使用
getResourceAsStream
,不需要手动处理文件句柄。
/i3d/resourcesloader/libraries/lib.txt
工作正常,thx…如果我使用
/i3d/resourcesloader/libraries/lib.txt
,我无法将字符串传递给文件构造函数,因为它的行为就像创建了一个空文件,而不是链接到该地址的现有文件。相反,如果我在文件构造函数中使用
src/i3d/resourcesloader/libraries/lib.txt
,它将读取现有的。我糊涂了
getResource
返回一个
URL
。使用此选项,不要
toString
it。更好的是:在大多数情况下,您只需使用
getResourceAsStream
,而不需要手动处理文件句柄。
String path = ResourcesLoader.class.getResource("/i3d/resourcesloader/libraries/lib.txt").toString();