无法在Java Web应用程序中读取属性文件?

ipk*_*iss 1 java servlets properties

我试图在我的java Web应用程序中读取属性文件.我试过这些解决方案:

在基于servlet的应用程序中放置位置以及如何读取配置资源文件?

如何从Java EE Web应用程序访问属性文件?

但它们都不适合我.

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

在此输入图像描述

读取属性文件的代码放在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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Bal*_*usC 6

你把它放在servlets包中,但是你试图从类路径根目录中获取它.前导/使得路径相对于类路径根.

相应地修复路径:

p.load(this.getClass().getClassLoader().getResourceAsStream("/servlets/a.properties"));
Run Code Online (Sandbox Code Playgroud)

或者,假设当前类已经在servlets包中:

p.load(this.getClass().getClassLoader().getResourceAsStream("a.properties"));
Run Code Online (Sandbox Code Playgroud)

具体问题无关,稍后可能会将WAR外部的属性文件移动到外部位置,这样可以轻松编辑文件而无需每次都重建/重新部署,然后我建议使用线程的上下文类加载器而不是当前类的类加载器.它适用于所有情况:

p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("servlets/a.properties"));
Run Code Online (Sandbox Code Playgroud)

(注意路径不需要从/这里开始,因为它总是相对于类路径根)