【问题标题】:Cannot read properties file in Java web app?无法在 Java Web 应用程序中读取属性文件?
【发布时间】:2011-10-04 13:13:08
【问题描述】:

我正在尝试在我的 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);
        }
    }
}

有什么想法吗?

【问题讨论】:

    标签: java servlets properties


    【解决方案1】:

    您已将它放在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"));
    

    (注意这里的路径不需要以/ 开头,因为它总是相对于类路径根目录)

    【讨论】:

    • 谢谢,成功了。但是,如果我将它移到 Web Pages 文件夹中,如何读取该属性文件?
    • 在您找到的第一个链接中已回答:ServletContext#getResourceAsStream()。但是,如果您真的需要将它放在网络内容中而不是类路径中,我会三思而后行。
    • 但这只有在读取属性代码放在 servlet 类(我们得到 ServletContext)中时才有效。这在我的情况下不起作用,这意味着读取代码在普通类中(A.java,普通java类中没有这样的ServletContext)
    • 没错。按照我的建议将它保存在类路径中:)
    【解决方案2】:

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

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

    而不是这个

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-25
      • 2013-12-22
      • 2012-08-18
      • 2011-03-10
      • 1970-01-01
      • 2014-03-20
      • 2013-10-31
      • 1970-01-01
      相关资源
      最近更新 更多