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

如何獲取jar包resources文件路徑

 更新時(shí)間:2023年12月26日 15:12:09   作者:GJQ-JAVA  
java項(xiàng)目發(fā)布到j(luò)ar之后找不到文件路徑,遇到這樣問題如何處理呢,下面小編給大家分享獲取jar包resources文件路徑的解決方法,感興趣的朋友一起看看吧

獲取jar包resources文件路徑

java項(xiàng)目發(fā)布到j(luò)ar之后找不到文件路徑
本地: String path = this.getClass().getClassLoader().getResource(xmlPath).getPath();
打成jar發(fā)布服務(wù)器不管用了

解決辦法:

//相對路徑
 private final String xmlPath= "/jenkinspipeline/PipelineConfig.xml";
    public StringBuilder propertyResolverXml(String xmlPath) {
        InputStream resourceAsStream = XmlLocalUtils.class.getResourceAsStream(xmlPath);//讀取內(nèi)容
        StringBuilder xmlStr = new StringBuilder();
        BufferedReader read = null;
        try {
            read = new BufferedReader(new InputStreamReader(resourceAsStream));//轉(zhuǎn)成bufferreader按行讀取
            String tempStr;
            while ((tempStr = read.readLine()) != null) {
                xmlStr.append(tempStr);
            }
            read.close();
        } catch (Exception ex) {
            log.error("解析文件異常:", ex);
            throw new NativeSphereCicdException(NativeSphereCicdEnum.PROPERTYRESOLVERXML_EXCEPTION);
        }
        return xmlStr;
    }

補(bǔ)充:

Springboot獲取jar包中resources資源目錄下的文件

阿薩斯多問題現(xiàn)象:

        今天在項(xiàng)目中遇到一個(gè)業(yè)務(wù)場景,需要用到resources資源目錄下的文件,然后就在思考一個(gè)問題:

        當(dāng)項(xiàng)目打成jar后,Springboot要如何獲取resources資源目錄下的文件呢?

問題分析:

        如題,如何在項(xiàng)目打成jar包之后,在代碼中依然能夠獲取到j(luò)ar包中resources資源目錄下的文件呢?

        我們都知道其實(shí)要獲取resources資源目錄下的文件,有非常多的方法;這些方法雖然能在正常的debug本地運(yùn)行項(xiàng)目時(shí)有效,但在項(xiàng)目打成jar包運(yùn)行時(shí),卻并非都是有效的了?。?!

        因此,在這里我打算記錄一個(gè)親測可行的方法。

        首先,展示一下我的項(xiàng)目結(jié)構(gòu),如圖我在resources資源目錄下創(chuàng)建了一個(gè)文件夾rules,然后在其中創(chuàng)建了3個(gè)drl文件:

        由于代碼邏輯非常簡單,所以這里直接通過啟動(dòng)類來測試了。

        ResourceDemoApplication:

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import java.io.File;
import java.io.IOException;
/**
 * resource資源目錄專題
 * @author Stephen
 */
@SpringBootApplication
public class ResourceDemoApplication {
	public static void main(String[] args) {
//		SpringApplication.run(ResourceDemoApplication.class, args);
		try {
			//如何獲取resource下的文件?【注意:即使打成jar包也得有效】
			ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
			Resource[] resources = resourcePatternResolver.getResources("classpath*:rules/**/*.*");
			for ( Resource resource : resources ) {
				//獲取文件名
				System.out.println(resource.getFilename());
				//獲取文件,該方式在打成jar包后會(huì)報(bào)錯(cuò),因?yàn)閞esource文件不在系統(tǒng)中,而是在jar包中
				File file1 = resource.getFile();
				//獲取文件,在打成jar包后,通過url來獲取文件,則路徑是正確的
				File file = new File(resource.getURL().getFile());
				//獲取文件絕對路徑,但路徑有問題,因?yàn)閞esource文件不在系統(tǒng)中,而是在jar包中
//				System.out.println(file.getAbsolutePath());
				//獲取文件名
				System.out.println(file.getName());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

        接下來展示的是運(yùn)行結(jié)果。

        首先是本地項(xiàng)目:        

        可以看到,非常順利的打印出了文件名。

        然后是jar包運(yùn)行:

        同樣沒問題。

注意:

        需要注意的是:在 ResourceDemoApplication 啟動(dòng)類中,有兩行被注釋掉的代碼:

        上面這行代碼在本地運(yùn)行是沒問題的,但打成jar包運(yùn)行時(shí)會(huì)出現(xiàn)如下報(bào)錯(cuò),所以不建議使用:

        顯示的文件路徑是:

jar:file:/C:/Users/Administrator/Desktop/resource_demo-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/rules/comparison-rules.drl

        可以看到 resource_demo-0.0.1-SNAPSHOT.jar 后面跟了一個(gè) ! 然后才是對應(yīng)drl文件target包中的路徑,這個(gè)細(xì)節(jié)我沒有深究,但單從這個(gè)暴多的文件路徑來分析的話,我的理解就是,這個(gè)文件路徑其實(shí)是個(gè)偽路徑,它不是文件真實(shí)的url地址,所以通過resource對象無法獲取到文件。       

        另一行注釋的代碼是:

         執(zhí)行這行代碼,即使在jar包運(yùn)行時(shí),也不會(huì)報(bào)錯(cuò),只是在jar包運(yùn)行時(shí),打印的文件絕對路徑并不是真實(shí)的路徑,也就是系統(tǒng)無法識(shí)別,因?yàn)檫@個(gè)文件在jar包內(nèi)部,路徑如下:

         如有擴(kuò)展,后續(xù)將會(huì)補(bǔ)充。

解決方法:

try {
			ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
			Resource[] resources = resourcePatternResolver.getResources("classpath*:rules/**/*.*");
			for ( Resource resource : resources ) {
				//獲取文件,在打成jar包后,通過url來獲取文件,則路徑是正確的
				File file = new File(resource.getURL().getFile());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

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

相關(guān)文章

  • Java實(shí)現(xiàn)單例模式的五種方法介紹

    Java實(shí)現(xiàn)單例模式的五種方法介紹

    單例模式確保某個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。在計(jì)算機(jī)系統(tǒng)中,線程池、緩存、日志對象、對話框、打印機(jī)、顯卡的驅(qū)動(dòng)程序?qū)ο蟪1辉O(shè)計(jì)成單例
    2023-01-01
  • Java集合List的使用詳細(xì)解析

    Java集合List的使用詳細(xì)解析

    這篇文章主要介紹了Java集合List的使用詳細(xì)解析,List集合類中元素有序、且可重復(fù),集合中的每個(gè)元素都有其對應(yīng)的順序索引,鑒于Java中數(shù)組用來存儲(chǔ)數(shù)據(jù)的局限性,我們通常使用java.util.List替代數(shù)組,需要的朋友可以參考下
    2023-11-11
  • java/word+fusionchart生成圖表深入分析

    java/word+fusionchart生成圖表深入分析

    本文將以java/word+fusionchart生成圖表問題深入解析,有興趣的朋友可以參考下
    2012-11-11
  • Java對接微信支付全過程

    Java對接微信支付全過程

    本文主要介紹了Java對接微信支付全過程,涵蓋注冊商戶、生成預(yù)支付訂單、處理回調(diào)和查詢訂單狀態(tài)等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • 關(guān)于aop切面 注解、參數(shù)如何獲取

    關(guān)于aop切面 注解、參數(shù)如何獲取

    這篇文章主要介紹了關(guān)于aop切面 注解、參數(shù)如何獲取,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • Spring Boot 整合 MyBatis 連接數(shù)據(jù)庫及常見問題

    Spring Boot 整合 MyBatis 連接數(shù)據(jù)庫及常見問題

    MyBatis 是一個(gè)優(yōu)秀的持久層框架,支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射,下面詳細(xì)介紹如何在 Spring Boot 項(xiàng)目中整合 MyBatis 并連接數(shù)據(jù)庫,感興趣的朋友一起看看吧
    2025-03-03
  • 解析Java和Eclipse中加載本地庫(.dll文件)的詳細(xì)說明

    解析Java和Eclipse中加載本地庫(.dll文件)的詳細(xì)說明

    本篇文章是對Java和Eclipse中加載本地庫(.dll文件)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 如何在mybatis中向BLOB字段批量插入數(shù)據(jù)

    如何在mybatis中向BLOB字段批量插入數(shù)據(jù)

    這篇文章主要介紹了如何在mybatis中向BLOB字段批量插入數(shù)據(jù)的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-10-10
  • 詳解java中String、StringBuilder、StringBuffer的區(qū)別

    詳解java中String、StringBuilder、StringBuffer的區(qū)別

    這篇文章主要介紹了java中String、StringBuilder、StringBuffer的區(qū)別,文中講解的很清晰,有對于這方面不太懂的同學(xué)可以研究下
    2021-02-02
  • Java實(shí)現(xiàn)修改圖片文件名的方法示例

    Java實(shí)現(xiàn)修改圖片文件名的方法示例

    在很多應(yīng)用中,用戶需要對文件進(jìn)行重命名操作,包括圖片文件,圖片文件的重命名操作可以是基于文件內(nèi)容、日期、用戶輸入等,本項(xiàng)目的目標(biāo)是實(shí)現(xiàn)一個(gè)Java程序,能夠修改圖片文件的文件名,并進(jìn)行簡單的文件名處理,需要的朋友可以參考下
    2025-02-02

最新評(píng)論