[英]Cannot read properties file in Java web app?
我正在嘗試在我的Java Web應用程序中讀取屬性文件。 我已經嘗試過這些解決方案:
在基於servlet的應用程序中的何處放置以及如何讀取配置資源文件?
但是他們都沒有為我工作。
這是我的應用程序的結構:
讀取屬性文件的代碼位於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.