最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

一種是普通的web項(xiàng)目,像用Tomcat容器,特點(diǎn)是壓縮包隨著容器的啟動(dòng)會(huì)解壓縮成一個(gè)文件夾,項(xiàng)目訪問的時(shí)候,實(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)是只有一個(gè)jar文件,在容器啟動(dòng)后不會(huì)解壓縮,項(xiàng)目實(shí)際訪問時(shí)jar包或者war包

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

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

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

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

jar里面文件讀取方式:

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

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

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

讀取文件的三種方式

1. ResourceUtils工具類

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

2. FileInputStream文件流的方式讀取

(該方式為按行讀取,若不是按行處理,需要像圖中將每行數(shù)據(jù)存在一個(gè)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壓縮包會(huì)隨著容器的啟動(dòng)解壓縮成一個(gè)文件夾,當(dāng)項(xiàng)目訪問的時(shí)候,實(shí)際是訪問文件夾,而非jar或者war包。

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • JVM內(nèi)置函數(shù)Intrinsics介紹

    JVM內(nèi)置函數(shù)Intrinsics介紹

    這篇文章主要介紹了JVM內(nèi)置函數(shù)Intrinsics,我們將學(xué)習(xí)什么是intrinsics(內(nèi)部/內(nèi)置函數(shù)),以及它們?nèi)绾卧贘ava和其他基于JVM的語言中工作,需要的朋友可以參考一下
    2022-02-02
  • java實(shí)現(xiàn)鮮花銷售系統(tǒng)

    java實(shí)現(xiàn)鮮花銷售系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)鮮花銷售系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Spring Boot集成Swagger接口分類與各元素排序問題

    Spring Boot集成Swagger接口分類與各元素排序問題

    這篇文章主要介紹了Spring Boot集成Swagger接口分類與各元素排序問題,首先我們需要對(duì)Swagger中的接口也就是以Controller 層作為第一級(jí)梯度進(jìn)行組織的,Controller在我們實(shí)際開發(fā)中,與其他具體接口之間是存在一對(duì)多的關(guān)系,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10
  • java中你的項(xiàng)目應(yīng)該如何正確分層

    java中你的項(xiàng)目應(yīng)該如何正確分層

    這篇文章主要介紹了java中你的項(xiàng)目應(yīng)該如何正確分層,業(yè)務(wù)分層對(duì)于代碼規(guī)范是比較重要,決定著以后的代碼是否可復(fù)用,感興趣的可以了解一下
    2021-04-04
  • Java由淺入深講解繼承上

    Java由淺入深講解繼承上

    繼承就是可以直接使用前輩的屬性和方法。自然界如果沒有繼承,那一切都是處于混沌狀態(tài)。多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個(gè)接口,使用不同的實(shí)例而執(zhí)行不同操作
    2022-04-04
  • servlet之session簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    servlet之session簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了servlet之session簡(jiǎn)介,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • java實(shí)現(xiàn)FTP文件上傳與文件下載

    java實(shí)現(xiàn)FTP文件上傳與文件下載

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)FTP文件上傳與文件下載的相關(guān)資料,通過以下兩種方式實(shí)現(xiàn),通過JDK自帶的API實(shí)現(xiàn),二是通過Apache提供的API是實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2016-04-04
  • Java利用配置重試策略解決超時(shí)問題

    Java利用配置重試策略解決超時(shí)問題

    在web應(yīng)用中,由于網(wǎng)絡(luò)原因或其他不可預(yù)測(cè)的原因,應(yīng)用間會(huì)出現(xiàn)調(diào)用失敗的情形,通過配置重試策略可以有效解決外在原因?qū)е碌南到y(tǒng)故障。本文就來詳細(xì)說說如何利用配置重試策略解決超時(shí)問題
    2022-10-10
  • 詳解Java在redis中進(jìn)行對(duì)象的緩存

    詳解Java在redis中進(jìn)行對(duì)象的緩存

    這篇文章主要介紹了Java在redis中進(jìn)行對(duì)象的緩存,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Spring Boot與MyBatis配置與操作實(shí)戰(zhàn)指南

    Spring Boot與MyBatis配置與操作實(shí)戰(zhàn)指南

    本文介紹了如何在SpringBoot項(xiàng)目中配置和使用MyBatis,包括環(huán)境準(zhǔn)備、數(shù)據(jù)源配置、MyBatis配置、數(shù)據(jù)操作、事務(wù)管理以及高級(jí)配置如緩存和插件的使用,通過這些步驟,可以實(shí)現(xiàn)高效的數(shù)據(jù)驅(qū)動(dòng)應(yīng)用程序開發(fā),感興趣的朋友跟隨小編一起看看吧
    2026-01-01

最新評(píng)論

阿克| 镶黄旗| 绥芬河市| 唐海县| 安徽省| 合川市| 大同县| 航空| 关岭| 吴堡县| 密云县| 德安县| 常熟市| 太和县| 孟州市| 海林市| 策勒县| 兴海县| 凤庆县| 台江县| 昌都县| 江油市| 桦甸市| 斗六市| 高要市| 行唐县| 信宜市| 高清| 桂阳县| 通化县| 三穗县| 兰西县| 彝良县| 会昌县| 新河县| 瑞金市| 丹棱县| 台南县| 阿拉善右旗| 威远县| 尉犁县|