gpt4 book ai didi

java - 类加载器找不到资源

转载 作者:行者123 更新时间:2023-12-02 06:27:07 26 4
gpt4 key购买 nike

我正在创建一个属性类,该属性类最终将捆绑到一个 jar 中进行分发。因此,我尝试加载通过 getResourceFromStream() 保存属性的文件。

但是,我尝试调用它的各种方法都找不到文件。

我尝试加载的文件位于 src 文件夹的 Properties 文件夹中。它们各自的路径是“/System Properties/src/Properties/Default Properties”和“/System Properties/src/Properties/System Properties”。

我的构建路径包含 src 文件夹及其子文件夹,因此文件位于构建路径上。

根据我所读到的内容,我尝试了以下加载文件进行测试的方法:

getClass().getResource("/src/Resources/Default Properties"));
getClass().getClassLoader().getResource("/src/Resources/Default Properties");
Thread.currentThread().getContextClassLoader().getResource("/src/Resources/Default Properties");

所有这些方法都返回 null。

使用以下代码会生成空指针错误。

getClass().getClassLoader().getResourceAsStream("/src/Resources/Default Properties");
Thread.currentThread().getContextClassLoader().getResourceAsStream("/src/Resources/Default Properties");

编辑:我的构建路径是 System Properties/src。

该项目有以下目录:
源代码
-属性
--默认属性
--系统属性

-systemproperties//这三个文件包含.java源代码。

-systemproperties.activator

-systemproperties.internal

最佳答案

类加载器加载的资源遵循与类相同的规则。

如果类名为 com.foo.bar.SomeClass,则必须在 src 文件夹中的 com/foo/bar/SomeClass.java 中定义它,并且位于运行时,com 目录必须位于类路径中的目录或 jar 中。推论是,如果您在 src 文件夹中找到文件 zorg/bla/zim/Foo.java,则类名必须是 zorg.bla.zim.Foo .

对于资源来说,也是一样的。因此,如果您在 src 文件夹中找到名为 Properties/Default Properties 的资源,则其完全限定资源名称为 Properties/Default Properties,而不是 src/Resources/默认属性

在运行时,src 文件夹是不相关的。 src 文件夹是存储源文件的位置。运行时仅使用类路径。

关于java - 类加载器找不到资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20418332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com