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

SpringBoot中讀取jar包中的resources目錄下的文件的三種方式

 更新時(shí)間:2023年06月26日 11:26:19   作者:sco5282  
這篇文章給大家總結(jié)了SpringBoot讀取 jar 包中的 resources 目錄下的文件的三種方式,文中有詳細(xì)的代碼示例供大家參考,,需要的朋友可以參考下

讀取 resources 目錄下的文件路徑時(shí),需要注意一點(diǎn):在本地開發(fā)時(shí),我們是能夠通過(guò)代碼獲取到這個(gè)文件的絕對(duì)路徑的(如:在 c 盤下或者 d 盤下的);但部署后,項(xiàng)目是通過(guò)打成 jar 包運(yùn)行的,里面的文件是沒(méi)有實(shí)際路徑的(只有相對(duì)于項(xiàng)目名的相對(duì)路徑)。

因?yàn)樽詈罂隙ㄊ谴虬渴鸬?,所以掌握針?duì)后者的這種方式來(lái)讀取文件是很有必要的。

代碼圖如下:

方式一:(重要)

通過(guò) T.class.getClassLoader().getResourceAsStream() 方法。如:我要讀取 config 文件夾下的 test.properties 文件:

這是一個(gè)公共方法,用來(lái)讀取文件中的內(nèi)容的方法,下面就不再重復(fù)了:

public static void printFileContent(Object obj) throws IOException {
    if (null == obj) {
        throw new RuntimeException("參數(shù)為空");
    }
    BufferedReader reader = null;
    // 如果是文件路徑
    if (obj instanceof String) {
        reader = new BufferedReader(new FileReader(new File((String) obj)));
    // 如果是文件輸入流
    } else if (obj instanceof InputStream) {
        reader = new BufferedReader(new InputStreamReader((InputStream) obj));
    }
    String line = null;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
    reader.close();
}

讀取方法:

public class ResourceUtil {
    public void getResource(String fileName) throws IOException{
        InputStream in = this.getClass().getClassLoader().getResourceAsStream(fileName);
        printFileContent(in);
    }
    public static void main(String[] args) throws IOException {
        new ResourceUtil().getResource("config/test.properties");
    }
}

即使是一個(gè) jar 包,也依舊能讀取到。

此方法默認(rèn)是從 classpath 路徑(即:src 或 resources 路徑下)下查找文件的,所以,路徑前不需要加 “/”。

方式二:(重要)

通過(guò) T.class..getResourceAsStream() 方法。

public void getResource2(String fileName) throws IOException{
    InputStream in = this.getClass().getResourceAsStream("/" + fileName);
    printFileContent(in);
}
public static void main(String[] args) throws IOException {
    new ResourceUtil().getResource2("config/test.properties");
}

方法默認(rèn)也是從 classpath 路徑(即:src 或 resources 路徑下)下查找文件的,但它的路徑前為什么需要加 “/” 呢?

這個(gè)是跟要讀取的文件與當(dāng)前.class 文件的位置有關(guān)。

看看編譯后的文件路徑:

當(dāng)前文件 ResourceUtil.class 與要加載的文件 test.properties 的位置如上:
很顯然 test.properties 和 ResourceUtil.class 不在同一個(gè)文件夾下。

那讀取的時(shí)候是要帶上相對(duì)路徑的,那么,這會(huì)有兩種情況:

  • 相對(duì)于當(dāng)前類 ResourceUtil,路徑前是不需要加 “/”
  • 相對(duì)于項(xiàng)目名(即:編譯后的 classes 文件夾),路徑前是需要加 “/”

舉例:

  • 如果 test.properties 和 ResourceUtil 在同一個(gè)文件夾下,那么:this.getClass().getResourceAsStream(“test.properties”)
  • 如果 test.properties 和 ResourceUtil 不在同一個(gè)文件夾下,那么:this.getClass().getResourceAsStream(“/config/test.properties”)

如果測(cè)試,不要在源文件下添加配置文件,因?yàn)榫幾g后,在相應(yīng)的路徑下看不見(jiàn)此配置文件??梢允褂?Test.java 代替。

即使是一個(gè) jar 包,也依舊能讀取到。

方式三:(重要)

通過(guò) ClassPathResource 方法:

public void getResource3(String fileName) throws IOException{
    ClassPathResource classPathResource = new ClassPathResource(fileName);
    printFileContent(classPathResource.getInputStream());
}
public static void main(String[] args) throws IOException {
    new ResourceUtil().getResource3("config/test.properties");
}

path 前加不加 “/” 無(wú)所謂。

即使是一個(gè) jar 包,也依舊能讀取到。

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

相關(guān)文章

  • Java之BigDecimal實(shí)現(xiàn)詳解

    Java之BigDecimal實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java之BigDecimal實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Springboot把外部依賴包納入Spring容器管理的兩種方式

    Springboot把外部依賴包納入Spring容器管理的兩種方式

    這篇文章主要給大家介紹了Springboot把外部依賴包納入Spring容器管理的兩種方式,Spring.factories和org.springframework.boot.autoconfigure.AutoConfiguration.imports,有感興趣的小伙伴可以參考閱讀本文
    2023-07-07
  • Java語(yǔ)言Consistent Hash算法學(xué)習(xí)筆記(代碼示例)

    Java語(yǔ)言Consistent Hash算法學(xué)習(xí)筆記(代碼示例)

    這篇文章主要介紹了Java語(yǔ)言Consistent Hash算法學(xué)習(xí)筆記(代碼示例),分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Mybatis-Plus使用saveOrUpdate及問(wèn)題解決方法

    Mybatis-Plus使用saveOrUpdate及問(wèn)題解決方法

    本文主要介紹了Mybatis-Plus使用saveOrUpdate及問(wèn)題解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 一文詳解Java過(guò)濾器攔截器實(shí)例逐步掌握

    一文詳解Java過(guò)濾器攔截器實(shí)例逐步掌握

    這篇文章主要為大家介紹了Java過(guò)濾器攔截器實(shí)例詳解逐步掌握,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • springboot集成opencv實(shí)現(xiàn)人臉識(shí)別功能的詳細(xì)步驟

    springboot集成opencv實(shí)現(xiàn)人臉識(shí)別功能的詳細(xì)步驟

    大家都知道OpenCV是一個(gè)基于BSD許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac OS操作系統(tǒng)上今天通過(guò)本文給大家分享springboot集成opencv實(shí)現(xiàn)人臉識(shí)別,感興趣的朋友一起看看吧
    2021-06-06
  • Java調(diào)用SQL腳本執(zhí)行常用的方法示例

    Java調(diào)用SQL腳本執(zhí)行常用的方法示例

    這篇文章主要給大家介紹了關(guān)于Java調(diào)用SQL腳本執(zhí)行常用的方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • MybatisPlus將自定義的sql列表查詢返回改為分頁(yè)查詢

    MybatisPlus將自定義的sql列表查詢返回改為分頁(yè)查詢

    本文主要介紹了MybatisPlus將自定義的sql列表查詢返回改為分頁(yè)查詢,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Java的堵塞隊(duì)列BlockingQueue詳解

    Java的堵塞隊(duì)列BlockingQueue詳解

    這篇文章主要介紹了Java的堵塞隊(duì)列BlockingQueue詳解,阻塞隊(duì)列常用于生產(chǎn)者和消費(fèi)者的場(chǎng)景,生產(chǎn)者是向隊(duì)列里添加元素的線程,消費(fèi)者是從隊(duì)列里取元素的線程,需要的朋友可以參考下
    2023-12-12
  • java教程之對(duì)象序列化使用基礎(chǔ)示例詳解

    java教程之對(duì)象序列化使用基礎(chǔ)示例詳解

    所謂對(duì)象序列化就是將對(duì)象的狀態(tài)轉(zhuǎn)換成字節(jié)流,以后可以通過(guò)這些值再生成相同狀態(tài)的對(duì)象,下面詳細(xì)介紹一下java對(duì)象的序列化使用方法
    2014-01-01

最新評(píng)論