我正在创建一个属性类,最终将捆绑到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
答案 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文件夹是存储源文件的位置。在运行时只使用类路径。