1. 程式人生 > >java web中讀取properties檔案時的路徑問題

java web中讀取properties檔案時的路徑問題

在web開發時,難免會有一些固定的引數,我們一般把這些固定的引數存在properties檔案中,然後用的時候要讀出來。但經常出現一些錯誤,找不到相應的路徑,所以,今天特地講一些如何正確獲得路徑。

首先,我們要將properties檔案部署在$app/WEB-INF/classes資料夾裡,比如將info.properties檔案放在dingding這個web應用下時,該檔案所在的路徑為$dingding/WEB-INF/classes/info.properties。

然後讀取的時候分為兩種情況讀取:

(一)在Servlet類中的讀取

有兩種讀取方式:

1.直接將properties檔案讀入的流中

InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/info.properties");
Properties prop = new Properties();
prop.load(in);
prop.getProperty("username");

2.獲得properties檔案的路徑,然後在用流讀出

String path = this.getServletContext().getRealPath("/WEB-INF/classes/info.properties");
FileInputStream in = new FileInputStream(path);
Properties prop = new Properties();
prop.load(in);
prop.getProperty("username");
推薦第二種方法,易於理解。

(二)在非Servlet類中(普通java類中)的讀取

也有兩種讀取方式:

1.直接將檔案裝載到記憶體中

InputStream in = Demo.class.getClassLoader().getResourceAsStream("db.properties");
Properties prop = new Properties();
prop.load(in);
prop.getProperty("username");
但存在一些缺陷:類裝載器載入內容時,會先查詢記憶體中是否已經存在相應的內容,如果有就不再載入直接使用記憶體中的,所以此方法,第一次載入後,如果檔案內容有變動,第二次載入後還是原來的內容,無法載入修改後的內容。下邊的方法取檔案的絕對路徑來載入不會有這種問題。

2.讀取到檔案的路徑,然後用流讀出

String path = Demo.class.getClassLoader().getResource("info.properties").getPath();
FileInputStream in = new FileInputStream(path);
Properties prop = new Properties();
prop.load(in);
prop.getProperty("username");
上面在使用FileInputStream時傳入的都是絕對路徑,也可以使用相對路徑:
普通java工程:是相對於當前類的所在路徑
web工程:是相對於$tomcat/bin       ($tomcat為tomcat的路徑名)