天天看點

web項目讀取classpath路徑下面的檔案

首先分兩大類按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裡面檔案讀取方式: