web專案讀取classpath下面檔案
注意:本文用到spring的工具類和,commons-io工具類
首先分兩大類按web容器分類
1、
是普通的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();
2、
是內嵌web容器,其特點是隻有一個jar檔案,在容器啟動後不會解壓縮,專案實際訪問時jar包或者war包
這種最容易遇坑,最大的坑就是,用第一種方式讀取,在eclipse,本地除錯,完美執行,到Linux環境下,就掛了,你這個大罵靠,什麼玩意,莫慌莫慌,你來到了我的部落格,就會讓你長知識的
首先用獲取路徑的方法this.getClass().getResource("/")+fileName,
獲取流的方法this.getClass().getResourceAsStream(failName);
在本地執行時,絕壁能找到,你列印出來路徑,沒錯,是我們們eclipse的工作目錄,專案目錄,但是在target目錄下。
現在給你分析為什麼去到線上,就掛了,很簡單,線上內嵌的工程,我們只會放一個jar檔案上去,我理解是jar裡面的路徑是獲取不到的,jar是封閉性東西吧,不像資料夾,總不能c:/home/xx.jar/file.txt,這種路徑我寫出來你是不是心裡激起一點小浪花,別浪,穩點。所以說到這我已經吧上帝的真理告訴你了,不要告訴別人,這是個祕密,我總結一點,讀取jar裡面的檔案,我們只能用流去讀取,不能用file,檔案肯定要牽扯路徑,jar那個路徑剛剛我已經拼出來了
jar裡面檔案讀取方式:
ClassPathResource classPathResource = new ClassPathResource("test.txt");
獲取檔案流:classPathResource .getInputStream();
相關文章
- 讀取ClassPath下resource檔案的正確姿勢
- Golang專案中讀取配置檔案Golang
- Go 專案配置檔案的定義和讀取Go
- Java 讀取檔案Java
- tiff檔案讀取
- 任意檔案讀取
- WebAPI專案框架新建讀取配置檔案幫助類WebAPI框架
- python讀取檔案——python讀取和儲存mat檔案Python
- viper 讀取配置檔案
- go配置檔案讀取Go
- iOS讀取.csv檔案iOS
- php 讀取超大檔案PHP
- JAVA 讀取xml檔案JavaXML
- WinForm讀取Excel檔案ORMExcel
- java讀取properties檔案Java
- 前端讀取excel檔案前端Excel
- 用友任意檔案讀取
- IOC - 讀取配置檔案
- Spring - 配置檔案中的classpath: 和 classpath*: 的區別Spring
- 讀取檔案流並寫入檔案流
- Web 專案的快取策略Web快取
- VB讀取文字檔案的例子:逐行讀取
- C#讀取文字檔案和寫文字檔案C#
- spark直接讀取本地檔案系統的檔案Spark
- cocos讀取plist檔案
- go–讀取檔案的方式Go
- Mysql溯源-任意檔案讀取?MySql
- Java系列:讀取XML檔案JavaXML
- C#讀取Xml檔案C#XML
- java中讀取配置檔案Java
- matlab讀取npy檔案Matlab
- pg從磁碟讀取檔案
- python小白檔案讀取Python
- iOS如何讀取.db檔案iOS
- python讀取大檔案Python
- python 讀取csv檔案Python
- 用JDOM讀取XML檔案XML
- Java高效讀取大檔案Java