web項目讀取classpath路徑下面的文件

 

首先分兩大類按web容器分類linux

 

一種是普通的web項目,像用Tomcat容器,特色是壓縮包隨着容器的啓動會解壓縮成一個文件夾,項目訪問的時候,實際是去訪問文件夾,而不是jar或者war包。web

 

這種的不管你是用獲取路徑的方法this.getClass().getResource("/")+fileNamespring

獲取流的方法this.getClass().getResourceAsStream(failName);eclipse

 

 

 

import org.springframework.util.ResourceUtils;this

 

File file= ResourceUtils.getFile("classpath:test.txt");spa

 

或者.net

 

ClassPathResource classPathResource = new ClassPathResource("test.txt");調試

 

獲取文件:classPathResource .getFile();blog

 

獲取文件流:classPathResource .getInputStream();ip

 

第二種是內嵌web容器,其特色是隻有一個jar文件,在容器啓動後不會解壓縮,項目實際訪問時jar包或者war包

 

這種最容易遇坑,最大的坑就是,用第一種方式讀取,在eclipse,本地調試,完美運行,到linux環境下,就不行.

 

首先用獲取路徑的方法this.getClass().getResource("/")+fileName,獲取流的方法this.getClass().getResourceAsStream(failName);

在本地運行時,絕壁能找到,你打印出來路徑,沒錯,是我們eclipse的工做目錄,項目目錄,可是在target目錄下。

如今給你分析爲何去到線上,就GG了,很簡單,線上內嵌的工程,咱們只會放一個jar文件上去,我理解是jar裏面的路徑是獲取不到的,jar是封閉性東西吧,不像文件夾,總不能c:/home/xx.jar/file.txt

讀取jar裏面的文件,咱們只能用流去讀取,不能用file,文件確定要牽扯路徑,jar那個路徑剛剛我已經拼出來了

 

jar裏面文件讀取方式:

 

ClassPathResource classPathResource = new ClassPathResource("test.txt");

 

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

相關文章
相關標籤/搜索