首先分兩大類按web容器分類
一種是普通的web項目,像用Tomcat容器,特點是壓縮包随着容器的啟動會解壓縮成一個檔案夾,項目通路的時候,實際是去通路檔案夾,而不是jar或者war包。
這種的無論你是用擷取路徑的方法this.getClass().getResource("/")+fileName
擷取流的方法this.getClass().getResourceAsStream(failName);
import org.springframework.util.ResourceUtils;
File file= ResourceUtils.getFile("classpath:test.txt");
或者
ClassPathResource classPathResource = new ClassPathResource("test.txt");
擷取檔案:classPathResource .getFile();
擷取檔案流:classPathResource .getInputStream();
<a href="http://blog.csdn.net/u012260707/article/details/51887626"> </a>
第二種是内嵌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裡面檔案讀取方式: