亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

idea啟動(dòng)與jar包啟動(dòng)中使用resource資源文件路徑的問題

 更新時(shí)間:2023年07月17日 09:16:28   作者:某猿蚊常叮  
這篇文章主要介紹了idea啟動(dòng)與jar包啟動(dòng)中使用resource資源文件路徑的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

idea啟動(dòng)與jar包啟動(dòng)中使用resource資源文件路徑

問題描述

項(xiàng)目直接用idea運(yùn)行的時(shí)候好好的,但是打包成Jar之后卻出現(xiàn)了莫名其妙的BUG,經(jīng)過很長時(shí)間的調(diào)試之后,才發(fā)現(xiàn)是打包之后的文件路徑出現(xiàn)了問題。

在原本的代碼中使用的是這樣的代碼來讀取resource中的文件

ClassLoader classLoader = this.class.getClassLoader(); ??
URL appUrl = classLoader.getResource("center/AppStarter.java");?
File appJava = new File(appUrl.getFile());

這樣的代碼直接運(yùn)行時(shí)沒問題的,能夠正確的讀取到文件,但是打包成jar之后,

在網(wǎng)上查找了很久,終于找到了解決方法。

讀取resource中的文件需要使用InputStream來進(jìn)行讀取,然后轉(zhuǎn)換成String。

具體實(shí)現(xiàn)可以參看下面的代碼。

//2.創(chuàng)建輸入流
String path = "META-INF/item.xml"
InputStream is = this.getClass().getClassLoader().getResourceAsStream(path);

這樣寫了之后打包成jar后能夠成功讀取到resource中的文件

問題分析

在idea中可以通過絕對路徑讀取文件,但是package成jar包之后,路徑的文件形式發(fā)生變化,但是可以通過class路徑,然后通過相對路徑的方式拿到文件流,達(dá)到文件內(nèi)容的讀取。

Jar包啟動(dòng)通過ClassPathResource獲取不到文件路徑

項(xiàng)目目錄結(jié)構(gòu)

在這里插入圖片描述

maven項(xiàng)目resources目錄也是會(huì)被編譯到classpath下的。

      ClassPathResource resource = new ClassPathResource("/map/map.properties");
        InputStream inputStream = resource.getInputStream();
        System.out.println("inputStream.available() = " + inputStream.available());
        System.out.println("resource.getFile().getAbsolutePath() = " +    	resource.getFile().getAbsolutePath());

如果是使用idea進(jìn)行本地開發(fā)時(shí),是可以獲取到classpath下的資源的路徑的,因?yàn)槭亲x取的磁盤上的真正的那個(gè)文件。

在這里插入圖片描述

但是如果將項(xiàng)目打包成一個(gè)jar包后,再獲取map.properties是獲取不到的,對于操作系統(tǒng)來說最多只能讀取到j(luò)ar包,而不能再繼續(xù)讀取jar包里面的文件了,如果繼續(xù)讀取,只能交給jvm去讀了,此時(shí)能讀取到二進(jìn)制流,而不能獲取到路徑。

可通過以下幾種方式獲取classpath下的資源

 ClassPathResource classPathResource = new ClassPathResource("/map/map.properties");
        InputStream cis = classPathResource.getInputStream();
        //獲取classpath下第一個(gè)/map/map.properties,這個(gè)根據(jù)jar包的加載先后順序有關(guān)
        InputStream ris = ClassPathResource.class.getClassLoader().getResourceAsStream("/map/map.properties");
        //這個(gè)是獲取classpath下所有的map/map.properties,在jvm運(yùn)行時(shí),所有jar都相當(dāng)于是一個(gè)classpath
        Enumeration<URL> resources = ClassPathResource.class.getClassLoader().getResources("/map/map.properties");

總結(jié)

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

相關(guān)文章

  • Mybatis-plus自定義SQL注入器查詢@TableLogic邏輯刪除后的數(shù)據(jù)詳解

    Mybatis-plus自定義SQL注入器查詢@TableLogic邏輯刪除后的數(shù)據(jù)詳解

    這篇文章主要給大家介紹了關(guān)于Mybatis-plus自定義SQL注入器查詢@TableLogic邏輯刪除后的數(shù)據(jù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Java實(shí)現(xiàn)LRU緩存算法的參考示例

    Java實(shí)現(xiàn)LRU緩存算法的參考示例

    這篇文章主要介紹了JAVA實(shí)現(xiàn)LRU緩存算法的參考示例,幫助大家根據(jù)需求實(shí)現(xiàn)算法,對大家的學(xué)習(xí)或工作有一定的參考價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Mybatis省略@Param注解原理分析

    Mybatis省略@Param注解原理分析

    這篇文章主要介紹了Mybatis省略@Param注解原理分析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 詳解Java中StringBuffer類常用方法

    詳解Java中StringBuffer類常用方法

    這篇文章主要為大家介紹了java中StringBuffer類常用方法
    2016-01-01
  • MyBatis-Plus中公共字段的統(tǒng)一處理的實(shí)現(xiàn)

    MyBatis-Plus中公共字段的統(tǒng)一處理的實(shí)現(xiàn)

    在開發(fā)中經(jīng)常遇到多個(gè)實(shí)體類有共同的屬性字段,這些字段屬于公共字段,本文主要介紹了MyBatis-Plus中公共字段的統(tǒng)一處理的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Spring中實(shí)例化bean的四種方式詳解

    Spring中實(shí)例化bean的四種方式詳解

    這篇文章主要給大家介紹了關(guān)于Spring中實(shí)例化bean的四種方式,分別是setter 方法、構(gòu)造函數(shù)、靜態(tài)工廠以及實(shí)例工廠等四種方法,分別給出了示例代碼供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • SpringBoot實(shí)現(xiàn)微信小程序支付功能

    SpringBoot實(shí)現(xiàn)微信小程序支付功能

    小程序支付功能已成為眾多應(yīng)用的核心需求之一,本文主要介紹了SpringBoot實(shí)現(xiàn)微信小程序支付功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • springboot整合gateway的詳細(xì)過程

    springboot整合gateway的詳細(xì)過程

    本文介紹了如何配置和使用Spring Cloud Gateway構(gòu)建一個(gè)API網(wǎng)關(guān),通過實(shí)例代碼介紹了springboot整合gateway的過程,需要的朋友可以參考下
    2025-01-01
  • ServletContext讀取web資源_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    ServletContext讀取web資源_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了ServletContext讀取web資源,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java實(shí)現(xiàn)Map遍歷key-value的四種方法

    Java實(shí)現(xiàn)Map遍歷key-value的四種方法

    本文主要介紹了Java實(shí)現(xiàn)Map遍歷key-value的四種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論