最新国产好看的视频,伊人天堂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的工具類(lèi)和,commons-io工具類(lèi)

首先分兩大類(lèi)按web容器分類(lèi)

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

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

上方便的工具類(lèi)吧

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í)際訪問(wèn)時(shí)jar包或者war包

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

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

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

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

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工具類(lèi)的方式,都會(huì)失敗,下面解釋原因:

讀取文件的三種方式

1. ResourceUtils工具類(lèi)

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ū)別

有兩種常見(jiàn)的web容器:

1. 第一種是普通的web項(xiàng)目,特點(diǎn)是jar/war壓縮包會(huì)隨著容器的啟動(dòng)解壓縮成一個(gè)文件夾,當(dāng)項(xiàng)目訪問(wèn)的時(shí)候,實(shí)際是訪問(wèn)文件夾,而非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í)際訪問(wèn)的就是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的語(yǔ)言中工作,需要的朋友可以參考一下
    2022-02-02
  • java實(shí)現(xiàn)鮮花銷(xiāo)售系統(tǒng)

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

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

    Spring Boot集成Swagger接口分類(lèi)與各元素排序問(wèn)題

    這篇文章主要介紹了Spring Boot集成Swagger接口分類(lèi)與各元素排序問(wèn)題,首先我們需要對(duì)Swagger中的接口也就是以Controller 層作為第一級(jí)梯度進(jìn)行組織的,Controller在我們實(shí)際開(kāi)發(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由淺入深講解繼承上

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

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

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

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

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

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

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

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

    這篇文章主要介紹了Java在redis中進(jìn)行對(duì)象的緩存,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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í)配置如緩存和插件的使用,通過(guò)這些步驟,可以實(shí)現(xiàn)高效的數(shù)據(jù)驅(qū)動(dòng)應(yīng)用程序開(kāi)發(fā),感興趣的朋友跟隨小編一起看看吧
    2026-01-01

最新評(píng)論

全椒县| 自治县| 清远市| 封丘县| 竹溪县| 咸阳市| 定日县| 谢通门县| 连州市| 天峨县| 江陵县| 长泰县| 宁津县| 蛟河市| 文安县| 大埔区| 莱阳市| 霍邱县| 河曲县| 梅州市| 视频| 谷城县| 山东| 铜陵市| 太保市| 丘北县| 分宜县| 商河县| 吴旗县| 黎城县| 德化县| 峨眉山市| 鄂尔多斯市| 额尔古纳市| 德州市| 江油市| 临西县| 招远市| 博爱县| 洪湖市| 宁陵县|