Java 如何从打包为同一jar的类文件中读取属性文件
我想从一个java类文件中读取一个属性文件,这两个文件被打包为一个相同的jar 项目结构:Java 如何从打包为同一jar的类文件中读取属性文件,java,Java,我想从一个java类文件中读取一个属性文件,这两个文件被打包为一个相同的jar 项目结构: src --->com ------->xyz ----------->Property(foldername) -------------------------------------->abc.properties ----------->JavaClassFileFolder ----------------------------------
src
--->com
------->xyz
----------->Property(foldername)
-------------------------------------->abc.properties
----------->JavaClassFileFolder
-------------------------------------->a.java
InputStream in = this.getClass().getClassLoader().getResourceAsStream("com/xyz/Property/abc.properties");
Properties prop = new Properties();
prop.load(in);
ClassLoader cl = Constants.class.getClassLoader();
Properties prop = new Properties();
prop .load(cl.getResourceAsStream("com/xyz/Property/abc.properties"));
在上面的结构文件夹中,我想从a.java
文件中读取abc.properties
文件。我在a.java
文件中尝试了以下方法来读取
方法1:
src
--->com
------->xyz
----------->Property(foldername)
-------------------------------------->abc.properties
----------->JavaClassFileFolder
-------------------------------------->a.java
InputStream in = this.getClass().getClassLoader().getResourceAsStream("com/xyz/Property/abc.properties");
Properties prop = new Properties();
prop.load(in);
ClassLoader cl = Constants.class.getClassLoader();
Properties prop = new Properties();
prop .load(cl.getResourceAsStream("com/xyz/Property/abc.properties"));
结果:将NPE抛出道具负载(英寸)
方法2:
src
--->com
------->xyz
----------->Property(foldername)
-------------------------------------->abc.properties
----------->JavaClassFileFolder
-------------------------------------->a.java
InputStream in = this.getClass().getClassLoader().getResourceAsStream("com/xyz/Property/abc.properties");
Properties prop = new Properties();
prop.load(in);
ClassLoader cl = Constants.class.getClassLoader();
Properties prop = new Properties();
prop .load(cl.getResourceAsStream("com/xyz/Property/abc.properties"));
Result:将NPE抛出prop.load(in)您的方法一必须工作,只要
此
引用a类,并且属性文件存在于您提到的目的地,它应该工作。它不会这样做的唯一原因是com/xyz/Property/abc.properties不在jar中您使用的是一个相对路径(开始时没有),因此getResourceAsStream从对象的包开始(this)。在开头添加/,您正在搜索绝对类路径,因为您在同一个类加载器中(您的类和属性文件在同一个jar中),所以这里也没有问题。用/
开始路径,请参阅
也就是说:
- 如果使用Maven,请将属性文件放到
。Maven将为您进行必要的复制src/main/resources/com/xyz/property
- 始终以小写字母开头Java包名称,即使用
而不是property
。通常,您只希望Java类以大写字母开头property
- 通常,不需要使用类加载器,而是使用
Constants.class.getResourceAsStream(“/com/xyz/property/abc.properties”)
abc.properties
是否存在于您期望的位置