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

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

 更新時間:2023年12月26日 15:03:11   作者:Stephen·You  
今天在項目中遇到一個業(yè)務場景,需要用到resources資源目錄下的文件,本文主要介紹了Springboot獲取jar包中resources資源目錄下的文件,感興趣的可以了解一下

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

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

當項目打成jar后,Springboot要如何獲取resources資源目錄下的文件呢?

問題分析:

如題,如何在項目打成jar包之后,在代碼中依然能夠獲取到jar包中resources資源目錄下的文件呢?

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

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

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

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

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包后會報錯,因為resource文件不在系統(tǒng)中,而是在jar包中
				File file1 = resource.getFile();

				//獲取文件,在打成jar包后,通過url來獲取文件,則路徑是正確的
				File file = new File(resource.getURL().getFile());

				//獲取文件絕對路徑,但路徑有問題,因為resource文件不在系統(tǒng)中,而是在jar包中
//				System.out.println(file.getAbsolutePath());

				//獲取文件名
				System.out.println(file.getName());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

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

首先是本地項目:        

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

然后是jar包運行:

同樣沒問題。

注意:

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

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

顯示的文件路徑是:

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 后面跟了一個 ! 然后才是對應drl文件target包中的路徑,這個細節(jié)我沒有深究,但單從這個暴多的文件路徑來分析的話,我的理解就是,這個文件路徑其實是個偽路徑,它不是文件真實的url地址,所以通過resource對象無法獲取到文件。

另一行注釋的代碼是:

執(zhí)行這行代碼,即使在jar包運行時,也不會報錯,只是在jar包運行時,打印的文件絕對路徑并不是真實的路徑,也就是系統(tǒng)無法識別,因為這個文件在jar包內(nèi)部,路徑如下:

如有擴展,后續(xù)將會補充。

解決方法:

		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)文章

  • HttpClient實現(xiàn)調(diào)用外部項目接口工具類的示例

    HttpClient實現(xiàn)調(diào)用外部項目接口工具類的示例

    下面小編就為大家?guī)硪黄狧ttpClient實現(xiàn)調(diào)用外部項目接口工具類的示例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java文件讀寫詳解

    Java文件讀寫詳解

    在真實的應用場景中,很多時候需要使用?Java?讀寫文件。比如說,讀取配置文件信息、讀取用戶輸入等。本篇文章將會詳細介紹?Java?文件讀寫的相關(guān)知識,其中包括:讀取文件、寫入文件、復制文件和刪除文件等操作,需要的朋友可以參考下
    2023-05-05
  • RedisTemplate和Redisson的區(qū)別

    RedisTemplate和Redisson的區(qū)別

    本文主要介紹了RedisTemplate和Redisson的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-11-11
  • Mybatis 一級緩存與二級緩存的實現(xiàn)

    Mybatis 一級緩存與二級緩存的實現(xiàn)

    mybatis作為一個流行的持久化工具,緩存必然是缺少不了的組件。通過這篇文章,就讓我們來了解一下一級緩存與二級緩存的實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Spring Cloud Alibaba使用Sentinel實現(xiàn)接口限流

    Spring Cloud Alibaba使用Sentinel實現(xiàn)接口限流

    這篇文章主要介紹了Spring Cloud Alibaba使用Sentinel實現(xiàn)接口限流,本文詳細的介紹了Sentinel組件的用法以及接口限流,感興趣的可以了解一下
    2019-04-04
  • IDEA全局查找關(guān)鍵字的用法解讀

    IDEA全局查找關(guān)鍵字的用法解讀

    這篇文章主要介紹了IDEA全局查找關(guān)鍵字的用法解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java中l(wèi)ong類型與Long類型的區(qū)別和大小比較詳解

    Java中l(wèi)ong類型與Long類型的區(qū)別和大小比較詳解

    這篇文章主要給大家介紹了Java中l(wèi)ong類型與Long類型區(qū)別和大小比較的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-11-11
  • Java中List類的contains和indexOf方法的使用及區(qū)別

    Java中List類的contains和indexOf方法的使用及區(qū)別

    這篇文章主要介紹了Java中List類的contains和indexOf方法的使用及區(qū)別,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • Java如何基于反射機制獲取不同的類

    Java如何基于反射機制獲取不同的類

    這篇文章主要介紹了Java如何基于反射機制獲取不同的類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • mybatis plus generator 根據(jù)數(shù)據(jù)庫自動生成實體類的實現(xiàn)示例

    mybatis plus generator 根據(jù)數(shù)據(jù)庫自動生成實體類的實現(xiàn)示例

    本文主要介紹了mybatis plus generator 根據(jù)數(shù)據(jù)庫自動生成實體類的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

吴川市| 济南市| 泌阳县| 淅川县| 台北县| 昌吉市| 建水县| 泸西县| 新田县| 漠河县| 南平市| 突泉县| 乃东县| 临武县| 汨罗市| 泰宁县| 怀柔区| 达州市| 同江市| 景洪市| 简阳市| 富民县| 岳西县| 桐梓县| 连云港市| 阿尔山市| 南充市| 新绛县| 新干县| 化德县| 原阳县| 新龙县| 平顺县| 垦利县| 炉霍县| 临夏市| 洪洞县| 平和县| 洛阳市| 区。| 漳平市|