當前位置:
首頁 > 知識 > Spring Boot 讀取靜態資源文件

Spring Boot 讀取靜態資源文件

一、需求場景

有時候我們需要在項目中使用一些靜態資源文件,比如城市信息文件 countries.xml,在項目啟動後讀取其中的數據並初始化寫進資料庫中。

二、實現

靜態資源文件 countries.xml 放在 src/main/resources 目錄下

使用 Spring 的 ClassPathResource 來實現 :

Resource resource = new ClassPathResource("countries.xml");

File file = resource.getFile();

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

  • 1
  • 2
  • 3

ClassPathResource 類的注釋如下:

Resource implementation for class path resources. Uses either a given ClassLoader or a given Class for loading resources.

Supports resolution as java.io.File if the class path resource resides in the file system, but not for resources in a JAR. Always supports resolution as URL.

  • 1
  • 2
  • 3
  • 4

翻譯過來就是:

類路徑資源的資源實現。使用給定的ClassLoader或給定的類來載入資源。

如果類路徑資源駐留在文件系統中,則支持解析為 java.io.File,如果是JAR中的資源則不支持。始終支持解析為URL。

  • 1
  • 2
  • 3
  • 4

三、Jar 中資源文件

上面也提到了,如果靜態資源文件在文件系統里,則支持解析為 java.io.File,程序是能正常工作的。

到項目打包成 Jar 包放到伺服器上運行就報找不到資源的錯誤了!

解決法案是:不獲取 java.io.File 對象,而是直接獲取輸入流:

Resource resource = new ClassPathResource("countries.xml");

BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()));

  • 1
  • 2

說明:構造得到 resource 對象之後直接獲取其輸入流 resource.getInputStream()。

Spring Boot 讀取靜態資源文件

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

etcd啟動流程分析
MySQL使用JPA+Hibernate的9個高性能技巧

TAG:程序員小新人學習 |