【轉】SpringBoot——web項目下讀取classpath下的文件心得


在讀取springBoot+gradle構建的項目時,如果使用傳統的FileInputStream讀取文件流或者ResourceUtils工具類的方式,都會失敗,下面解釋原因:

一、讀取文件的三種方式:

1. ResourceUtils工具類

import org.springframework.util.ResourceUtils;
//使用:
File file= ResourceUtils.getFile("classpath:test.txt");

2. FileInputStream文件流的方式讀取


(該方式為按行讀取,若不是按行處理,需要像圖中將每行數據存在一個buffer中,然后轉成String處理)

3. ClassPathResource獲取文件流的方式

ClassPathResource classPathResource = new ClassPathResource("test.txt");
 
獲取文件:classPathResource .getFile();
 
獲取文件流:classPathResource .getInputStream();

二、不同web容器讀取文件的區別

有兩種常見的web容器:

  1. 第一種是普通的web項目,特點是jar/war壓縮包會隨着容器的啟動解壓縮成一個文件夾,當項目訪問的時候,實際是訪問文件夾,而非jar或者war包。該種方式下,用獲取路徑的方法:this.getClass().getResource("/")+fileName或者獲取流的方法:this.getClass().getResourceAsStream(failName);都可以成功。

  2. 第二種是內嵌web容器,Spring boot就是內嵌web容器,其特點是只有一個jar文件,在容器啟動后不會解壓縮,項目實際訪問的就是jar/war包該種方式最容易遇坑!!最大的坑就是,this.getClass().getResource("/")+fileName在本地windows下能完美找到路徑,可是在linux測試服務器下就失敗,所以讀取jar中的文件只能用流讀取,不能用file,即只能用方式三讀取。所以,用spring boot搭建的工程,只能用

classPathResource .getInputStream();獲取文件流。

轉自:https://blog.csdn.net/NNnora/article/details/80734326


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM