如何在不调用其绝对路径的情况下读取.properties文件

时间:2011-07-06 20:40:46

标签: java properties

我在

中有我的.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);
  }
}

以上不起作用,为什么?

3 个答案:

答案 0 :(得分:4)

如果将properties文件放在与读取它的类相同的包中,则指定其相对于该类的路径,即如果属性文件与加载它的类完全相同的包将路径指定为project.properties

如果将属性文件放在默认包中并且加载类不在默认包中,则必须指定绝对路径,如/project.properties。只是提醒一下,作为一般规则,没有类应该在默认的类路径中。

无论哪种方式,您的属性文件必须位于 classpath ,而您的属性不是。换句话说,它必须位于{{}的某个位置1}}。

更好的解决方案,但更复杂的是使用Guice to inject properties而不是编写自己的读者。

答案 1 :(得分:2)

答案 2 :(得分:-2)

假设您要避免使用绝对文件路径,而不是类路径中的绝对路径,则需要执行以下操作:

theProperties.class.getResourceAsStream("/WEB-INF/config/project.properties")

前方的正斜线非常重要。没有它,路径就相对于加载类的包位置而言。