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

解讀classpath讀取resources目錄下的文件

 更新時(shí)間:2023年01月12日 14:14:08   作者:人工智  
這篇文章主要介紹了解讀classpath讀取resources目錄下的文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

classpath讀取resources目錄下文件

最近在springboot+maven的項(xiàng)目中去讀取資源文件的時(shí)候,報(bào)了找不到文件的錯(cuò)誤。

由此展開了對(duì)maven項(xiàng)目編譯前和編譯后的目錄結(jié)構(gòu)的了解,以及對(duì)java的classpath的理解。

首先:

由Maven構(gòu)建的web工程,java代碼放在src/main/java路徑下,資源(配置文件等)放在src/main/resources路徑下,當(dāng)構(gòu)建jar包 或 war包時(shí),JVM虛擬機(jī)會(huì)自動(dòng)編譯java文件為class文件存放在 target/classes目錄下,resource資源下的文件會(huì)原封不動(dòng)的拷貝一份到 target/classes 目錄下:而我們一般取的classpath就是target/classes目錄

你可以通過這種方式打印你的calsspath

A.class.getClassLoader().getResource("").getPath();

這里又引出一個(gè)話題,我們可以根據(jù)兩種不同的方式去獲取Resources下的文件

1、class.getResource()

import org.junit.jupiter.api.Test;
 
public class ResourceTestDemo {
 
    @Test
    void getResourceTest(){
        System.out.println(ResourceTestDemo.class.getResource(""));
        System.out.println(ResourceTestDemo.class.getResource("/"));
       }

打印結(jié)果:

1、file:/Users/username/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/classes/3.txt
2、file:/Users/username/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/classes/test/2.txt

結(jié)果分析:

  • 1、getResource("")不帶"/“時(shí)候是從當(dāng)前類所在包路徑去獲取資源
  • 2、getResource("/")帶”/"時(shí)候是從classpath的根路徑獲取

2、getClassLoader().getResource()

@Test
 void getClassLoaderResourceTest(){
     System.out.println(ResourceTestDemo.class.getClassLoader().getResource(""));
     System.out.println(ResourceTestDemo.class.getClassLoader().getResource("/"));
 }

打印結(jié)果:

file:/Users/qinzhen/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/test-classes/
null

  • class.getResource()不帶"/"時(shí)候是從當(dāng)前類所在包路徑去獲取資源
  • class.getResource()帶"/"時(shí)候是從classpath的根路徑獲取
  • class.getResource()本質(zhì)上也是調(diào)用了getClassLoader,只是封裝了一層方便了我們使用而已
  • getClassLoader().getResource("")不帶"/"時(shí)候是從classpath的根路徑獲取
  • getClassLoader().getResource("/")路徑中無法帶有"/"
  • getResourceAsStream() 方法僅僅是獲取對(duì)應(yīng)路徑文件的輸入流,在路徑的用法上與getResource()一qu

4、批量讀取

如果想要批量讀區(qū)resource下的文件呢?

Resource[] resources = ResourceTestDemo.class.getClassLoader().getResources("validator-config/*.xml");
for (int i = 0; i < resources.length; i++) {
    InputStream inputStream = resources[i].getInputStream();
    String xmlContent = IOUtils.toString(inputStream, "UTF-8");
    System.out.println("content" + i + "=" + xmlContent);
}
 

5、如果配置文件中要引用這個(gè)文件的路徑呢?

用classpath:xxx.xml 就可以了(xxx.xml放在resources目錄下)。注意是springboot的項(xiàng)目

如果還是取不到,看看你的maven工程的pom文件是否做了過濾文件,比如.keystore文件

 <build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>*.keystore</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>*.keystore</include>
            </includes>
        </resource>
    </resources>
</build>

總結(jié)

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

相關(guān)文章

  • Java Morris遍歷算法及其在二叉樹中的應(yīng)用

    Java Morris遍歷算法及其在二叉樹中的應(yīng)用

    Morris遍歷是一種基于線索二叉樹的遍歷算法,可以在不使用?;蜻f歸的情況下,實(shí)現(xiàn)二叉樹的前序、中序和后序遍歷。該算法利用二叉樹中的空指針或線索指針,將遍歷序列嵌入到原二叉樹中,實(shí)現(xiàn)了常數(shù)級(jí)別的空間復(fù)雜度,適用于對(duì)空間要求較高的場(chǎng)景
    2023-04-04
  • java.lang.IllegalStateException異常原因和解決辦法

    java.lang.IllegalStateException異常原因和解決辦法

    這篇文章主要給大家介紹了關(guān)于java.lang.IllegalStateException異常原因和解決辦法,IllegalStateException是Java標(biāo)準(zhǔn)庫中的一個(gè)異常類,通常表示在不合適或無效的情況下執(zhí)行了某個(gè)方法或操作,需要的朋友可以參考下
    2023-07-07
  • Java基于分治算法實(shí)現(xiàn)的棋盤覆蓋問題示例

    Java基于分治算法實(shí)現(xiàn)的棋盤覆蓋問題示例

    這篇文章主要介紹了Java基于分治算法實(shí)現(xiàn)的棋盤覆蓋問題,簡(jiǎn)單描述了棋盤覆蓋問題,并結(jié)合具體實(shí)例形式分析了java基于分治算法實(shí)現(xiàn)棋盤覆蓋問題的相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • Java中HashMap和HashTable區(qū)別

    Java中HashMap和HashTable區(qū)別

    HashMap和Hashtable都是Java常見的基于哈希表實(shí)現(xiàn)的Map接口的實(shí)現(xiàn)類,本文主要介紹了Java中HashMap和HashTable區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • 老生常談Eclipse中的BuildPath(必看篇)

    老生常談Eclipse中的BuildPath(必看篇)

    下面小編就為大家?guī)硪黄仙U凟clipse中的BuildPath(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 在攔截器中讀取request參數(shù),解決在controller中無法二次讀取的問題

    在攔截器中讀取request參數(shù),解決在controller中無法二次讀取的問題

    這篇文章主要介紹了在攔截器中讀取request參數(shù),解決在controller中無法二次讀取的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 解析SpringBoot整合SpringDataRedis的過程

    解析SpringBoot整合SpringDataRedis的過程

    這篇文章主要介紹了SpringBoot整合SpringDataRedis的過程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • RabbitMQ使用案例詳解

    RabbitMQ使用案例詳解

    RabbitMQ是基于Erlang語言開發(fā)的開源的消息中間件,這篇文章給大家介紹RabbitMQ使用案例,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • java中實(shí)現(xiàn)token過期失效超時(shí)

    java中實(shí)現(xiàn)token過期失效超時(shí)

    在Java應(yīng)用程序中,為了確保安全性和保護(hù)用戶數(shù)據(jù),一種常見的做法是使用Token進(jìn)行身份驗(yàn)證和授權(quán),Token是由服務(wù)器生成的具有一定時(shí)效的令牌,用于識(shí)別和驗(yàn)證用戶身份,當(dāng)Token失效后,用戶將無法再進(jìn)行相關(guān)操作,從而提高系統(tǒng)的安全性
    2023-10-10
  • Spring?@EventListener?異步中使用condition的問題及處理

    Spring?@EventListener?異步中使用condition的問題及處理

    這篇文章主要介紹了Spring?@EventListener?異步中使用condition的問題及處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評(píng)論