用Spring的這個類來讀取配置檔案
阿新 • • 發佈:2021-01-20
技術標籤: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()
方法只支援JBoss的vfs
協議頭和傳統檔案系統的file
協議頭。所以推薦使用getInputStream()
。
3. 總結
ClassPathResource