我在
中有我的.properties文件com.someOtherpage
-somefolder
--theProperties.java `<--- This guy needs it`
com.somepackage
WEB-INF
-config
--project.properties `<--- Here is where he sits`
部署后如何调用属性文件而不调用其绝对路径,如下所示
public class theProperties
{
private static Properties properties = new Properties();
public theProperties()
{
}
public String get(String attribute) throws Exception
{
//what do I need to set up to be able to call this file this way
//notice there is no '../../project.properties'
// -----
InputStream is = theProperties.class.getResourceAsStream("project.properties");
properties.load(is);
is.close();
return properties.getProperty(attribute);
}
}
以上不起作用,为什么?
答案 0 :(得分:4)
如果将properties
文件放在与读取它的类相同的包中,则指定其相对于该类的路径,即如果属性文件与加载它的类完全相同的包将路径指定为project.properties
。
如果将属性文件放在默认包中并且加载类不在默认包中,则必须指定绝对路径,如/project.properties
。只是提醒一下,作为一般规则,没有类应该在默认的类路径中。
无论哪种方式,您的属性文件必须位于 classpath
,而您的属性不是。换句话说,它必须位于{{}的某个位置1}}。
更好的解决方案,但更复杂的是使用Guice to inject properties而不是编写自己的读者。
答案 1 :(得分:2)
这是一个很好的解释如何...... http://jaitechwriteups.blogspot.com/2007/01/how-to-read-properties-file-in-web.html
答案 2 :(得分:-2)
假设您要避免使用绝对文件路径,而不是类路径中的绝对路径,则需要执行以下操作:
theProperties.class.getResourceAsStream("/WEB-INF/config/project.properties")
前方的正斜线非常重要。没有它,路径就相对于加载类的包位置而言。