如何从打包为同一jar的类文件中读取属性文件

时间:2014-02-07 06:29:21

标签: java

我想从java类文件中读取一个属性文件,这两个文件都打包在一起作为同一个jar。

项目结构:

src  
--->com  
------->xyz  
----------->Property(foldername)  
-------------------------------------->abc.properties  
----------->JavaClassFileFolder  
-------------------------------------->a.java

在上面的结构文件夹中,我想从abc.properties文件中读取a.java文件。我在a.java文件中尝试了下面的方法来阅读。

方法一:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("com/xyz/Property/abc.properties");  
Properties prop =  new Properties();  
prop.load(in);

结果:在prop.load(in)

中抛出NPE

方法2:

ClassLoader cl = Constants.class.getClassLoader();
Properties prop =  new Properties();   
prop .load(cl.getResourceAsStream("com/xyz/Property/abc.properties"));

结果:在prop.load(in)

中抛出NPE

4 个答案:

答案 0 :(得分:1)

它应该工作。它不是唯一的原因是com / xyz / Property / abc.properties不在jar中

答案 1 :(得分:1)

使用/开始路径,请参阅this.getClass().getClassLoader().getResource("...") and NullPointerException

那说:

  • 如果您使用Maven,请将您的属性文件存入src/main/resources/com/xyz/property。 Maven将为您进行必要的复制。
  • 始终使用小写字母开始您的Java包名称,即使用property而不是Property。通常,您只希望Java类以大写字母开头。
  • 通常,没有必要使用类加载器,而是使用Constants.class.getResourceAsStream("/com/xyz/property/abc.properties")

答案 2 :(得分:0)

你的方法必须工作,因为this指的是a类,属性文件出现在你提到的目的地

答案 3 :(得分:0)

您使用的是相对路径(开头没有 / ),因此 getResourceAsStream 从对象的包中开始() 。在开头添加 / ,你正在搜索classpath绝对值,因为你在同一个类加载器(你的类和你的属性 - 文件在同一个jar中),这里也没有问题。