2011-10-04 239 views
1

我想读我的Java Web应用程序中的属性文件。我尝试了这些解决方案:无法读取Java Web应用程序中的属性文件?

Where to place and how to read configuration resource files in servlet based application?

Howto access properties file from Java EE web application?

但他们没有为我工作。

这里是我的应用程序的结构:

enter image description here

,读取属性文件被放置在一个类,甚至我把绝对路径没有工作的代码。 A是一个普通的Java类。 但一切工作就像一个魅力如果读性能代码在servlet类(ProcessRequest.java)地方

这里是我使用的代码:

public class A { 
    public A() { 
     try { 
      Properties p = new Properties(); 
      p.load(this.getClass().getClassLoader().getResourceAsStream("/a.properties")); 
      String n = p.getProperty("name"); 
      System.out.println("name: " + n); 
     } catch (Exception ex) { 
      Logger.getLogger(A.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

任何想法?

回答

6

你把它放在servlets包,但是你想它从classpath根得到。领先的/使路径相对于类路径根。后来

p.load(this.getClass().getClassLoader().getResourceAsStream("a.properties")); 

无关到具体的问题,可能是:

修复相应的路径:

p.load(this.getClass().getClassLoader().getResourceAsStream("/servlets/a.properties")); 

或者,假设当前类在servlets包已发生这种情况时,您将WAR外的属性文件移动到外部位置,从而无需n即可轻松编辑该文件每次都要重建/重新部署,那么我建议使用线程的上下文类加载器,而不是当前类的类加载器。它会在所有环境下工作:

p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("servlets/a.properties")); 

(注意,路径不需要在这里开始/,因为它总是相对的classpath根)

+0

谢谢,这工作。但是,如果我将它移动到“网页”文件夹,我如何才能读取该属性文件? – ipkiss

+1

这是你在第一个链接中找到的答案:'ServletContext#getResourceAsStream()'。但是如果你真的需要在网页内容中而不是在类路径中,我会考虑三次。 – BalusC

+0

但是,只有阅读属性代码放在一个servlet类(我们得到ServletContext)时才有效。这在我的情况下不起作用,这意味着阅读代码是在一个普通的类(A.java,在普通的java类中没有这样的ServletContext) – ipkiss

0

在构建应用程序之后,您是否看到WEB-INF/servlets下的属性文件?如果是,那么尝试使用下面的行。

p.load(getServletContext().getResourceAsStream("/WEB-INF/servlets/a.properties")); 

,而不是这个

p.load(this.getClass().getClassLoader().getResourceAsStream("/a.properties")); 
+0

它不会在那里结束。 – BalusC

相关问题