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

idea啟動與jar包啟動中使用resource資源文件路徑的問題

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

idea啟動與jar包啟動中使用resource資源文件路徑

問題描述

項目直接用idea運行的時候好好的,但是打包成Jar之后卻出現(xiàn)了莫名其妙的BUG,經(jīng)過很長時間的調(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());

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

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

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

具體實現(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路徑,然后通過相對路徑的方式拿到文件流,達到文件內(nèi)容的讀取。

Jar包啟動通過ClassPathResource獲取不到文件路徑

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

在這里插入圖片描述

maven項目resources目錄也是會被編譯到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進行本地開發(fā)時,是可以獲取到classpath下的資源的路徑的,因為是讀取的磁盤上的真正的那個文件。

在這里插入圖片描述

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

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

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

    Mybatis省略@Param注解原理分析

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

    詳解Java中StringBuffer類常用方法

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

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

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

    Spring中實例化bean的四種方式詳解

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

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

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

    springboot整合gateway的詳細過程

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

    ServletContext讀取web資源_動力節(jié)點Java學院整理

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

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

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

最新評論