欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于web項(xiàng)目讀取classpath下面文件的心得分享

 更新時間:2023年07月20日 10:59:44   作者:有逼格d伊凡  
這篇文章主要介紹了關(guān)于web項(xiàng)目讀取classpath下面文件的心得,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

web項(xiàng)目讀取classpath下面文件的心得

閱讀之前須知:本文用到spring的工具類和,commons-io工具類

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

一種是普通的web項(xiàng)目,像用Tomcat容器,特點(diǎn)是壓縮包隨著容器的啟動會解壓縮成一個文件夾,項(xiàng)目訪問的時候,實(shí)際是去訪問文件夾,而不是jar或者war包

這種的無論你是用獲取路徑的方法this.getClass().getResource("/")+fileName,獲取流的方法this.getClass().getResourceAsStream(failName);,屢試不爽,都行,這種沒什么可注意的,大多數(shù)項(xiàng)目都是這種

上方便的工具類吧

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

或者

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

第二種是內(nèi)嵌web容器,其特點(diǎn)是只有一個jar文件,在容器啟動后不會解壓縮,項(xiàng)目實(shí)際訪問時jar包或者war包

這種最容易遇坑,最大的坑就是,用第一種方式讀取,在eclipse,本地調(diào)試,完美運(yùn)行,到linux環(huán)境下,就GG,

首先用獲取路徑的方法this.getClass().getResource("/")+fileName,獲取流的方法this.getClass().getResourceAsStream(failName);在本地運(yùn)行時,絕壁能找到,你打印出來路徑,沒錯,是咱們eclipse的工作目錄,項(xiàng)目目錄,但是在target目錄下。

現(xiàn)在給你分析為什么去到線上,就GG了,很簡單,線上內(nèi)嵌的工程,我們只會放一個jar文件上去,我理解是jar里面的路徑是獲取不到的,jar是封閉性東西吧,不像文件夾,總不能c:/home/xx.jar/file.txt,這種路徑我寫出來你是不是心里激起一點(diǎn)小浪花,別浪,穩(wěn)點(diǎn)。

所以說到這我已經(jīng)吧上帝的真理告訴你了,不要告訴別人哦,這是個秘密,好,大哥我總結(jié)一點(diǎn),讀取jar里面的文件,我們只能用流去讀取,不能用file,文件肯定要牽扯路徑,jar那個路徑剛剛我已經(jīng)拼出來了

jar里面文件讀取方式:

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

web項(xiàng)目下讀取classpath下文件--使用springboot遇到的大坑

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

讀取文件的三種方式

1. ResourceUtils工具類

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

2. FileInputStream文件流的方式讀取

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

3. ClassPathResource獲取文件流的方式

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

不同web容器讀取文件的區(qū)別

有兩種常見的web容器:

1. 第一種是普通的web項(xiàng)目,特點(diǎn)是jar/war壓縮包會隨著容器的啟動解壓縮成一個文件夾,當(dāng)項(xiàng)目訪問的時候,實(shí)際是訪問文件夾,而非jar或者war包。

該種方式下,用獲取路徑的方法:this.getClass().getResource("/")+fileName或者獲取流的方法:this.getClass().getResourceAsStream(failName);都可以成功。

2. 第二種是內(nèi)嵌web容器,Spring boot就是內(nèi)嵌web容器,其特點(diǎn)是只有一個jar文件,在容器啟動后不會解壓縮,項(xiàng)目實(shí)際訪問的就是jar/war包

該種方式最容易遇坑?。∽畲蟮目泳褪?,this.getClass().getResource("/")+fileName在本地windows下能完美找到路徑,可是在linux測試服務(wù)器下就失敗,所以讀取jar中的文件只能用流讀取,不能用file,即只能用方式三讀取。

所以,用spring boot搭建的工程,只能用

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

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis的mapper特殊字符轉(zhuǎn)移及動態(tài)SQL條件查詢小結(jié)

    mybatis的mapper特殊字符轉(zhuǎn)移及動態(tài)SQL條件查詢小結(jié)

    mybatis mapper文件中條件查詢符,如>=,<,之類是不能直接寫的會報錯的需要轉(zhuǎn)移一下,本文給大家介紹了常見的條件查詢操作,對mybatis的mapper特殊字符及動態(tài)SQL條件查詢相關(guān)知識感興趣的朋友一起看看吧
    2021-09-09
  • Filter在springboot中的使用方法詳解

    Filter在springboot中的使用方法詳解

    這篇文章主要介紹了Filter在springboot中的使用方法詳解,filter(過濾器)作用于在intreceptor(攔截器)之前,不像intreceptor一樣依賴于springmvc框架,只需要依賴于serverlet,需要的朋友可以參考下
    2023-08-08
  • java使用MulticastSocket實(shí)現(xiàn)組播

    java使用MulticastSocket實(shí)現(xiàn)組播

    這篇文章主要為大家詳細(xì)介紹了java使用MulticastSocket實(shí)現(xiàn)組播,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 排序算法的Java實(shí)現(xiàn)全攻略

    排序算法的Java實(shí)現(xiàn)全攻略

    這篇文章主要介紹了排序算法的Java實(shí)現(xiàn),包括Collections.sort()的使用以及各種經(jīng)典算法的Java代碼實(shí)現(xiàn)方法總結(jié),超級推薦!需要的朋友可以參考下
    2015-08-08
  • @RequestParam 接收參數(shù)的值為null的處理方式

    @RequestParam 接收參數(shù)的值為null的處理方式

    這篇文章主要介紹了@RequestParam 接收參數(shù)的值為null的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java基于JDK 1.8的LinkedList源碼詳析

    Java基于JDK 1.8的LinkedList源碼詳析

    這篇文章主要給大家介紹了關(guān)于Java基于JDK 1.8的LinkedList源碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • java中常用的字符串的比較方法(兩種)

    java中常用的字符串的比較方法(兩種)

    本文主要介紹了java中兩種常用的字符串的比較方法。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • java版微信和支付寶退款接口

    java版微信和支付寶退款接口

    這篇文章主要為大家詳細(xì)介紹了java版微信退款接口和java版支付寶退款接口,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Java文件寫入器FileWriter使用指南

    Java文件寫入器FileWriter使用指南

    在Java中,FileWriter類用于將字符寫入文件中,它繼承了Writer類,因此可以使用Writer類中的所有方法,下面我們就來深入探討一下FileWriter類的使用方法吧
    2023-10-10
  • Spring IOC和aop的原理及實(shí)例詳解

    Spring IOC和aop的原理及實(shí)例詳解

    這篇文章主要介紹了Spring IOC和aop的原理及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11

最新評論