我想从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答案 0 :(得分:1)
它应该工作。它不是唯一的原因是com / xyz / Property / abc.properties不在jar中
答案 1 :(得分:1)
使用/
开始路径,请参阅this.getClass().getClassLoader().getResource("...") and NullPointerException。
那说:
src/main/resources/com/xyz/property
。 Maven将为您进行必要的复制。property
而不是Property
。通常,您只希望Java类以大写字母开头。Constants.class.getResourceAsStream("/com/xyz/property/abc.properties")
。答案 2 :(得分:0)
你的方法必须工作,因为this
指的是a类,属性文件出现在你提到的目的地
答案 3 :(得分:0)
您使用的是相对路径(开头没有 / ),因此 getResourceAsStream 从对象的包中开始(此) 。在开头添加 / ,你正在搜索classpath绝对值,因为你在同一个类加载器(你的类和你的属性 - 文件在同一个jar中),这里也没有问题。