类加载器无法查找资源

时间:2013-12-06 07:21:36

标签: java

我正在创建一个属性类,最终将捆绑到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");

编辑:我的构建路径是系统属性/ src。

该项目有以下目录:
SRC
-Properties
- 默认属性
- 系统属性

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

-systemproperties.activator

-systemproperties.internal

1 个答案:

答案 0 :(得分:1)

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

如果一个类名为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/Default Properties

在运行时,src文件夹无关紧要。 src文件夹是存储源文件的位置。在运行时只使用类路径。