我正在尝试在我的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?
但他们都没有为我工作。
这是我的应用程序的结构:
读取属性文件的代码放在A类中,即使我放置绝对路径它也不起作用。 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);
}
}
}
有什么想法吗?
答案 0 :(得分:6)
您已将其放在servlets
包中,但是您尝试从类路径根目录中获取它。前导/
使路径相对于类路径根。
相应地修复路径:
p.load(this.getClass().getClassLoader().getResourceAsStream("/servlets/a.properties"));
或者,假设当前类已经在servlets
包中:
p.load(this.getClass().getClassLoader().getResourceAsStream("a.properties"));
无关,以后可能会将WAR外部的属性文件移动到外部位置,这样可以轻松编辑文件而无需每次都重建/重新部署,然后我建议使用线程的上下文类加载器而不是当前类的类加载器。它适用于所有情况:
p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("servlets/a.properties"));
(请注意,这里的路径不需要以/
开头,因为它始终与classpath root相关)
答案 1 :(得分:0)
构建应用程序后,您是否在WEB-INF/servlets
下看到了属性文件。如果是,则尝试使用以下行。
p.load(getServletContext().getResourceAsStream("/WEB-INF/servlets/a.properties"));
而不是
p.load(this.getClass().getClassLoader().getResourceAsStream("/a.properties"));