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