簡體   English   中英

無法在Java Web應用程序中讀取屬性文件?

[英]Cannot read properties file in Java web app?

我正在嘗試在我的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);
        }
    }
}

任何想法?

您已將其放入servlets包中,但是嘗試將其從類路徑根目錄中獲取。 前導/使得路徑相對於類路徑根。

相應地修復路徑:

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

或者,假設當前類已經在servlets包中:

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

具體問題無關 ,以后可能會將您將WAR外部的屬性文件移動到外部位置,從而方便地編輯該文件,而無需每次都進行重建/重新部署,然后建議您使用線程的上下文類loader,而不是當前類的class loader。 它可以在所有情況下工作:

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

(請注意,該路徑無需以/開頭,因為它始終是相對於classpath根的)

構建應用程序后,您是否在WEB-INF/servlets下看到屬性文件。 如果是,則嘗試使用以下行。

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

代替這個

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM