您現在的位置是:首頁 > 籃球
springboot中,載入類路徑(classpath)中檔案內容的多種方法
- 由 Java雲海 發表于 籃球
- 2022-02-03
springboot測試類怎麼寫
本文聊一聊在 SpringBoot 應用中,訪問載入類路徑(classpath)中的檔案內容的多種方法。
透過Resource介面
Resource
介面抽象出一種更底層的方式管理資源,可以實現透過統一的方式處理各類檔案資源。下面是幾種獲取資源例項的方法。
手動載入
訪問類路徑中的檔案,我們可以直接使用
ClassPathResource
載入內容,比如:
預設情況下,
ClassPathResource
會線上程的上下文類載入器和預設系統類載入器之間進行選擇,以刪除樣板檔案。我們也可以直接指定類載入器,比如:
或者是透過指定類的類載入器:
從
Resource
物件,我們可以很容易的將其轉換為
InputStream
或
File
物件。
上面說的方式都是相對於類路徑的地址。如果想要指定某個類的相對路徑,我們和可以透過指定具體類來定義,比如:
這樣就是相對於Example的相對路徑了。在實際使用中,不太建議透過類獲取其相對路徑的檔案。這樣會將類與檔案的相對座標繫結,如果修改了類的包路徑,但是忘記修改檔案位置,就會出現錯誤。而且,大家現在一般是使用 Maven 之類的包管理器管理,可以直接在resources目錄中定義配置檔案,使用類路徑的相對地址載入檔案即可。
透過@Value自動轉換
我們還可以使用@Value直接注入Resource物件,比如:
@Value
還能支援其他的載入協議,比如
file:
或
url:
。
透過ResourceLoader載入
我們還能使用注入
ResourceLoader
來實現資源的懶載入,比如,先注入
ResourceLoader
例項:
然後在我們需要的地方,透過
ResourceLoader
例項載入資源:
在 Spring 中,
ApplicationContext
實現了
ResourceLoader
,所以,我們也可以直接透過
ApplicationContext
例項載入資源,比如:
使用ResourceUtils載入資源
在 Spring 內部,還提供了一個工具類
ResourceUtils
,可以很方便的獲取類路徑中額資源。但是透過這個類的 Javadoc 可以看到,這個類主要是在 Spring 內部使用,也就是說,不太推薦這種用法。不過我們可以瞭解一下:
我們可以瞭解其內部實現,但是還是建議使用其他更加標準的做法。
透過File物件讀取
我們可以使用
getFile
方法得到
File
例項,就可以用讀取
File
物件的方式讀取檔案了,比如:
但是這種方式不適用與讀取 jar 包中的檔案,鑑於現在很多應用都是透過 FatJar 方式部署,我們還需要找找其他方式。
透過InputStream物件讀取
File
物件不適合 jar 包中資源讀取的原因在於檔案路徑格式不一樣,所以我們可以直接將資源內容讀取為流的形式,這樣就沒有檔案路徑的問題了。比如:
讀取完畢。
文末總結
本文從載入資源、讀取內容兩個方法講解,給出了多種讀取方式。
《SpringBoot 實戰》是一個系列,我會透過實戰+原理的方式完整整個專欄,
有喜歡的小夥伴可以關注轉發一下,小編會持續為大家進行Java實戰內容分享!!!