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

SpringBoot中讀取jar包中的resources目錄下的文件的三種方式

 更新時(shí)間:2023年06月26日 11:26:19   作者:sco5282  
這篇文章給大家總結(jié)了SpringBoot讀取 jar 包中的 resources 目錄下的文件的三種方式,文中有詳細(xì)的代碼示例供大家參考,,需要的朋友可以參考下

讀取 resources 目錄下的文件路徑時(shí),需要注意一點(diǎn):在本地開發(fā)時(shí),我們是能夠通過代碼獲取到這個(gè)文件的絕對路徑的(如:在 c 盤下或者 d 盤下的);但部署后,項(xiàng)目是通過打成 jar 包運(yùn)行的,里面的文件是沒有實(shí)際路徑的(只有相對于項(xiàng)目名的相對路徑)。

因?yàn)樽詈罂隙ㄊ谴虬渴鸬?,所以掌握針對后者的這種方式來讀取文件是很有必要的。

代碼圖如下:

方式一:(重要)

通過 T.class.getClassLoader().getResourceAsStream() 方法。如:我要讀取 config 文件夾下的 test.properties 文件:

這是一個(gè)公共方法,用來讀取文件中的內(nèi)容的方法,下面就不再重復(fù)了:

public static void printFileContent(Object obj) throws IOException {
    if (null == obj) {
        throw new RuntimeException("參數(shù)為空");
    }
    BufferedReader reader = null;
    // 如果是文件路徑
    if (obj instanceof String) {
        reader = new BufferedReader(new FileReader(new File((String) obj)));
    // 如果是文件輸入流
    } else if (obj instanceof InputStream) {
        reader = new BufferedReader(new InputStreamReader((InputStream) obj));
    }
    String line = null;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
    reader.close();
}

讀取方法:

public class ResourceUtil {
    public void getResource(String fileName) throws IOException{
        InputStream in = this.getClass().getClassLoader().getResourceAsStream(fileName);
        printFileContent(in);
    }
    public static void main(String[] args) throws IOException {
        new ResourceUtil().getResource("config/test.properties");
    }
}

即使是一個(gè) jar 包,也依舊能讀取到。

此方法默認(rèn)是從 classpath 路徑(即:src 或 resources 路徑下)下查找文件的,所以,路徑前不需要加 “/”。

方式二:(重要)

通過 T.class..getResourceAsStream() 方法。

public void getResource2(String fileName) throws IOException{
    InputStream in = this.getClass().getResourceAsStream("/" + fileName);
    printFileContent(in);
}
public static void main(String[] args) throws IOException {
    new ResourceUtil().getResource2("config/test.properties");
}

方法默認(rèn)也是從 classpath 路徑(即:src 或 resources 路徑下)下查找文件的,但它的路徑前為什么需要加 “/” 呢?

這個(gè)是跟要讀取的文件與當(dāng)前.class 文件的位置有關(guān)。

看看編譯后的文件路徑:

當(dāng)前文件 ResourceUtil.class 與要加載的文件 test.properties 的位置如上:
很顯然 test.properties 和 ResourceUtil.class 不在同一個(gè)文件夾下。

那讀取的時(shí)候是要帶上相對路徑的,那么,這會有兩種情況:

  • 相對于當(dāng)前類 ResourceUtil,路徑前是不需要加 “/”
  • 相對于項(xiàng)目名(即:編譯后的 classes 文件夾),路徑前是需要加 “/”

舉例:

  • 如果 test.properties 和 ResourceUtil 在同一個(gè)文件夾下,那么:this.getClass().getResourceAsStream(“test.properties”)
  • 如果 test.properties 和 ResourceUtil 不在同一個(gè)文件夾下,那么:this.getClass().getResourceAsStream(“/config/test.properties”)

如果測試,不要在源文件下添加配置文件,因?yàn)榫幾g后,在相應(yīng)的路徑下看不見此配置文件??梢允褂?Test.java 代替。

即使是一個(gè) jar 包,也依舊能讀取到。

方式三:(重要)

通過 ClassPathResource 方法:

public void getResource3(String fileName) throws IOException{
    ClassPathResource classPathResource = new ClassPathResource(fileName);
    printFileContent(classPathResource.getInputStream());
}
public static void main(String[] args) throws IOException {
    new ResourceUtil().getResource3("config/test.properties");
}

path 前加不加 “/” 無所謂。

即使是一個(gè) jar 包,也依舊能讀取到。

到此這篇關(guān)于SpringBoot中讀取jar包中的resources目錄下的文件的三種方式的文章就介紹到這了,更多相關(guān)SpringBoot讀取resources文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java高并發(fā)的并發(fā)級別詳解

    java高并發(fā)的并發(fā)級別詳解

    這篇文章主要介紹了java高并發(fā)的并發(fā)級別,內(nèi)容十分豐富,在這里分享給大家,需要的朋友可以參考,希望能夠給你帶來幫助
    2021-10-10
  • Java中常見的XML解析方法與應(yīng)用詳解

    Java中常見的XML解析方法與應(yīng)用詳解

    XML(eXtensible Markup Language)是一種用于存儲和傳輸數(shù)據(jù)的標(biāo)記語言,被廣泛應(yīng)用于表示和交換獨(dú)立于應(yīng)用程序和硬件平臺的結(jié)構(gòu)化信息,下面我們就來看看它的常見解析方法有哪些吧
    2024-01-01
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(10)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(10)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Java?JDK1.8?安裝和環(huán)境配置教程詳解

    Java?JDK1.8?安裝和環(huán)境配置教程詳解

    文章簡要介紹了JDK 1.8的安裝流程,包括官網(wǎng)下載對應(yīng)系統(tǒng)版本、安裝時(shí)選擇非系統(tǒng)盤路徑、配置JAVA_HOME、CLASSPATH和Path環(huán)境變量,最后通過命令行驗(yàn)證安裝是否成功,感興趣的朋友一起看看吧
    2025-07-07
  • SpringBoot結(jié)合Swagger2自動(dòng)生成api文檔的方法

    SpringBoot結(jié)合Swagger2自動(dòng)生成api文檔的方法

    這篇文章主要介紹了SpringBoot結(jié)合Swagger2自動(dòng)生成api文檔的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • 使用Java實(shí)現(xiàn)在Excel中添加動(dòng)態(tài)數(shù)組公式

    使用Java實(shí)現(xiàn)在Excel中添加動(dòng)態(tài)數(shù)組公式

    動(dòng)態(tài)數(shù)組公式是?Excel?引入的一項(xiàng)重要功能,它允許用戶從單個(gè)單元格中的公式返回多個(gè)結(jié)果值,并將這些值自動(dòng)填充到與公式單元格相鄰的單元格中,本文主要介紹了如何使用Java實(shí)現(xiàn)在Excel中添加動(dòng)態(tài)數(shù)組公式,x需要的可以參考下
    2023-12-12
  • Java實(shí)現(xiàn)RedisUtils操作五大集合(增刪改查)

    Java實(shí)現(xiàn)RedisUtils操作五大集合(增刪改查)

    本文主要介紹了Java實(shí)現(xiàn)RedisUtils操作五大集合,文中通過示例代碼介紹的非常詳細(xì),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 解決@Validated對List對象驗(yàn)證失效問題

    解決@Validated對List對象驗(yàn)證失效問題

    文章指出@Validated注解無法驗(yàn)證List數(shù)組參數(shù),建議手動(dòng)逐項(xiàng)驗(yàn)證或封裝List為對象進(jìn)行驗(yàn)證,前者代碼冗余但直接,后者需調(diào)整JSON結(jié)構(gòu)但更簡潔,根據(jù)需求選擇方案,權(quán)衡靈活性與參數(shù)改造成本
    2025-09-09
  • Java多線程中Callable和Future的解讀

    Java多線程中Callable和Future的解讀

    這篇文章主要介紹了Java多線程中Callable和Future的解讀,Callable接口類似于Runnable,從名字就可以看出來了,但是Runnable不會返回結(jié)果,并且無法拋出返回結(jié)果的異常,而Callable功能更強(qiáng)大一些,被線程執(zhí)行后,可以返回值,這個(gè)返回值可以被Future拿到,需要的朋友可以參考下
    2023-09-09
  • 解決SpringBoot中MultipartResolver和ServletFileUpload的沖突問題

    解決SpringBoot中MultipartResolver和ServletFileUpload的沖突問題

    這篇文章主要介紹了解決SpringBoot中MultipartResolver和ServletFileUpload的沖突問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10

最新評論

奈曼旗| 张家川| 六盘水市| 宜丰县| 芦山县| 外汇| 忻州市| 察哈| 镇坪县| 丘北县| 姚安县| 合阳县| 甘洛县| 云梦县| 清河县| 台东县| 兴义市| 怀集县| 正蓝旗| 马公市| 泉州市| 西城区| 和静县| 绥宁县| 萨嘎县| 柳江县| 奎屯市| 惠水县| 汽车| 周口市| 呼玛县| 西青区| 顺昌县| 乌审旗| 海宁市| 诸暨市| 河南省| 孟村| 龙江县| 苗栗市| 富民县|