Answers:
从包中的类加载属性时,com.al.common.email.templates
可以使用
Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("foo.properties");
prop.load(in);
in.close();
(添加所有必要的异常处理)。
如果您的类不在该程序包中,则需要以不同的方式获取InputStream:
InputStream in =
getClass().getResourceAsStream("/com/al/common/email/templates/foo.properties");
相对路径(那些没有前导“/”)中getResource()
/ getResourceAsStream()
该资源将相对于它表示包的类是在目录中搜索平均值。
使用java.lang.String.class.getResource("foo.txt")
会/java/lang/String/foo.txt
在类路径上搜索(不合理的)文件。
使用绝对路径(以'/'开头的绝对路径)表示当前软件包将被忽略。
要添加到Joachim Sauer的答案中,如果您需要在静态上下文中执行此操作,则可以执行以下操作:
static {
Properties prop = new Properties();
InputStream in = CurrentClassName.class.getResourceAsStream("foo.properties");
prop.load(in);
in.close()
}
(像以前一样,省略了异常处理。)
resources
文件夹中的属性文件maven
以下两种情况与从名为的示例类中加载属性文件有关TestLoadProperties
。
情况1:使用加载属性文件 ClassLoader
InputStream inputStream = TestLoadProperties.class.getClassLoader()
.getResourceAsStream("A.config");
properties.load(inputStream);
在这种情况下,属性文件必须位于root/src
目录中才能成功加载。
情况2:不使用而加载属性文件 ClassLoader
InputStream inputStream = getClass().getResourceAsStream("A.config");
properties.load(inputStream);
在这种情况下,属性文件必须与TestLoadProperties.class
文件成功安装在同一目录中。
注意: TestLoadProperties.java
和TestLoadProperties.class
是两个不同的文件。前者.java
文件通常在项目src/
目录中,而后者.class
文件通常在项目bin/
目录中。
public class Test{
static {
loadProperties();
}
static Properties prop;
private static void loadProperties() {
prop = new Properties();
InputStream in = Test.class
.getResourceAsStream("test.properties");
try {
prop.load(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public class ReadPropertyDemo {
public static void main(String[] args) {
Properties properties = new Properties();
try {
properties.load(new FileInputStream(
"com/technicalkeeda/demo/application.properties"));
System.out.println("Domain :- " + properties.getProperty("domain"));
System.out.println("Website Age :- "
+ properties.getProperty("website_age"));
System.out.println("Founder :- " + properties.getProperty("founder"));
// Display all the values in the form of key value
for (String key : properties.stringPropertyNames()) {
String value = properties.getProperty(key);
System.out.println("Key:- " + key + "Value:- " + value);
}
} catch (IOException e) {
System.out.println("Exception Occurred" + e.getMessage());
}
}
}
假设您通过其load方法使用Properties类,并且我猜您正在使用ClassLoader getResourceAsStream来获取输入流。
您如何传递名称,似乎应该采用以下形式: /com/al/common/email/templates/foo.properties
请使用以下代码:
属性p = 新属性(); StringBuffer 路径= 新的StringBuffer (“ com / al / common / email / templates /” );
路径。append (“ foo.properties” ); InputStream fs = getClass ()。getClassLoader ()。的getResourceAsStream (路径。的toString ());
if(fs == null){
System.err.println("Unable to load the properties file");
}
else{
try{
p.load(fs);
}
catch (IOException e) {
e.printStackTrace();
}
}