關於讀取Src下配置檔案的那個傳說

2021-06-27 00:11:36 字數 1369 閱讀 8531

關於配置檔案的讀取,網上資料也不少,但是針對性並不是很強。大部分也是copy,而且方式單一,下面我來總結一下關於讀取src,即class下配置檔案的方式以及區別。

首先我們來定義乙個工程,建立乙個servlet,請求到後台後再轉向該頁面。主要看servlet**處理部分。然後在src下建立乙個配置檔案config.properties,定義乙個屬性name。

第一種:

類載入方式,這個在網上那可是一片的解釋,可是終歸到底就是使用類載入器進行載入,沒有其他兩樣!

主要**:

try  catch (exception e)
類載入器的獲得方式寫法不一,但是我看就使用本類class就行了。獲得配置檔案的流進行解析。

第二種:

我自己成為邦定的方法,邦定乙個配置檔案然後直接讀取屬性,這個配置檔案可以在任何包下面。

主要**:

try  catch (exception e)
第三種:

在web工程中我們都可以獲得系統的request物件,這個物件可以獲得請求的一些屬性,也可以獲得系統的一些資訊,通過這個物件可以得到系統的路徑資訊,然後得到配置檔案物理檔案,再得到檔案流然後解析。

但是如果使用了絕對路徑,那就應該注意路徑分隔符的書寫方式,因為在windows和linux下的寫法是不一樣的。我們通過環境屬性得到系統檔案分隔符然後再進行組裝。

string realpath = request.getsession().getservletcontext().getrealpath("");

try catch (exception e)

通過路徑組裝資訊可以看到,這個方法同樣可以讀取在web-inf下定義的配置檔案。

第四種:

我自己叫做屬性方式,首先得到環境資訊,然後通過系統自己載入某個配置檔案。

try  catch (exception e) 		

response.sendredirect("index.jsp");

}

通過**可以看到,這個方法同樣可以讀取web-inf下的檔案。

但是以上四種方法有什麼區別嗎?

以我自己的看法來說,前兩種方法是依賴類載入器的,而後面兩個沒有。而且後面兩個方法可以獲得web-inf下的配置檔案,而前兩種不可以。

另外最大的區別是,前兩種方法讀取後如果配置檔案被修改,再呼叫進行讀取的話,不能得到修改後的屬性。

最後原始碼附上,請多指教!

請您到iteye看我的原創:

關於java讀取src配置檔案的問題

我們的專案完成了,一切除錯成功,打包了,問題都出來了。又是配置檔案路徑找不到的問題!一開始我用的載入路徑的方法是這樣的 public static string getconf string key catch filenotfoundexception e catch ioexception e ...

關於Jboot讀取不到配置檔案

在專案中修改埠,但是啟動後還是預設8080!配置檔案中如下 type default undertow support undertow jboot.server.type undertow jboot.server.host jboot.server.port 9111 jboot.server....

讀取配置檔案

類載入器 1 直接用class.forname 類的路徑名 class.forname com.hsf.classloader.classloader 2 用classloder 類載入器 inputstream in classloader.getsystemresourceasstream aa...