1. 程式人生 > 其它 >用Spring的這個類來讀取配置檔案

用Spring的這個類來讀取配置檔案

技術標籤:j2ee框架

1. 前言

在開發中讀取專案中的配置或者靜態檔案是家常便飯的事情,我相信很多同學都從網上找下面的例子來進行檔案載入讀取操作。

利用ClassLoader獲取classpath路徑:

ClassLoaderloader=Thread.currentThread().getContextClassLoader();
StringclassPath=loader.getResource("").getPath()

或者利用Class物件來獲取絕對路徑或者classpath路徑:

Stringabsolutepath=this.getClass().getResource("").getPath();
StringclassPath=this.getClass().getResource("/").getPath();

然後在拼接檔案路徑讀取檔案。為什麼我這麼清楚?因為我也這麼幹過。但是現在我已經不這麼幹了,因為我發現了 Spring 框架提供了更加好用的載入讀取檔案的方式。

2. ClassPathResource

一般來說,我們專案的配置檔案及靜態資源都會放置在resources目錄下。這時我們可以通過 Spring 提供的ClassPathResource來訪問。例如在我最新的微信支付 SDK 專案中要載入微信支付的證書:

圖片

微信證書的類路徑為wechat/apiclient_cert.p12

對應讀取方法為:

ClassPathResourceresource=newClassPathResource(keyPath);
InputStreamis=resource.getInputStream();

然後你就能從流中讀取配置檔案的內容了,非常簡單。

還有其它一些方法,例如判斷檔案是否存在、獲取檔案的File物件等等,也非常有用。

ClassPathResource 的坑

說到獲取檔案物件的getFile()方法,這裡是有一個小坑的。當你利用這個方法去讀取 Jar 包裡面類路徑的檔案的時候是行不通的。

經過程式碼除錯,發現載入的地址是一個 Jar 檔案協議地址,它類似這種格式jar:file:/xxx/xx.jar!/xxxx

getFile()方法只支援JBossvfs協議頭和傳統檔案系統的file協議頭。所以推薦使用getInputStream()

3. 總結

ClassPathResource

在讀取類路徑下的檔案配置、或者 Excel 模板、靜態配置時非常有用,封裝了很多好用的 API,推薦大家在合適的場景下使用。