我正在尝试从文件中加载属性(test.properties)
我使用的代码如下:
URL url = getClass().getResource("../resources/test.properties");
properties.load(url.openStream());
但是当执行第二行时,我得到一个NPE。 (空指针异常)
我不确定这里有什么问题...我已经检查过该文件存在于URL指向的位置......
感谢任何帮助......
答案 0 :(得分:3)
Class.getResource(String)
的javadoc说:
如果找不到具有此名称的资源,则返回:URL对象或null
最有可能的问题是,getResource没有找到它正在寻找的资源。我非常怀疑在资源名称中使用".."
。 javadoc并未说getResource
将"."
或".."
路径组件视为具有特殊含义。
properties
也可能为空......
答案 1 :(得分:2)
我可能错了,但我相信你可以在调用getResource()
时使用“..”。我建议你试试“绝对”资源:
URL url = getClass().getResource("/path/to/resources/test.properties");
答案 2 :(得分:1)
properties
对象可能是null
吗?
答案 3 :(得分:1)
getResource
是否会找到您的文件的答案取决于您的系统类加载器。调用类加载器,但在调用类加载器之前,对传入的字符串进行以下转换。
来自班级javadoc:
- 如果名称以'/'('\ u002f')开头,则绝对名称为 资源是'/'。
后面的名称部分否则,绝对名称的格式如下:
modified_package_name / name
其中modified_package_name是此对象的包名称 用'/'代替'。' ( '\ u002e')。
因此,问题变为:您使用的类加载器是否能够解析modified_package_name/../resources/test.properties
?
答案 4 :(得分:0)
getClass().getResource()
解析相对于给定类的资源。试试getClass().getClassLoader().getResource()
。
答案 5 :(得分:0)
您也可以使用Apache的PropertiesConfiguration