加载java属性时出问题

时间:2010-04-23 12:43:47

标签: java file properties

我正在尝试从文件中加载属性(test.properties)

我使用的代码如下:

URL url = getClass().getResource("../resources/test.properties");
properties.load(url.openStream());

但是当执行第二行时,我得到一个NPE。 (空指针异常)

我不确定这里有什么问题...我已经检查过该文件存在于URL指向的位置......

感谢任何帮助......

6 个答案:

答案 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_pa​​ckage_name / name

         

    其中modified_pa​​ckage_name是此对象的包名称   用'/'代替'。' ( '\ u002e')。

  •   

因此,问题变为:您使用的类加载器是否能够解析modified_package_name/../resources/test.properties

答案 4 :(得分:0)

getClass().getResource()解析相对于给定类的资源。试试getClass().getClassLoader().getResource()

答案 5 :(得分:0)

您也可以使用Apache的PropertiesConfiguration

相关问题