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

SpringBoot項(xiàng)目中讀取resource目錄下的文件六種方法

 更新時(shí)間:2024年05月08日 09:51:45   作者:zunf  
這篇文章給大家總結(jié)了SpringBoot項(xiàng)目中讀取resource目錄下的文件六種方法,文中有詳細(xì)的代碼示例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下

一、先獲取絕對(duì)路徑再讀取文件(jar包里會(huì)獲取不到)

方法一:類加載器的getResource().getPath()獲取目錄路徑

    /**
     * 方法一:使用類加載器的getResource().getPath()獲取全路徑再拼接文件名,最后根據(jù)文件路徑獲取文件流
     * 備注:jar包不可用,因?yàn)閖ar包中沒(méi)有一個(gè)實(shí)際的路徑存放文件
     *
     * @param fileName
     * @return
     * @throws FileNotFoundException
     */
    public BufferedReader function1(String fileName) throws FileNotFoundException {

        //   /Users/zunf/code/read-resource/target/classes/
        String path = this.getClass().getClassLoader().getResource("").getPath();
        //   /Users/zunf/code/read-resource/target/classes/測(cè)試.txt
        String filePath = path + fileName;

        return new BufferedReader(new FileReader(filePath));
    }

方法二:類加載器的getResource().getPath()獲取文件路徑

    /**
     * 方法二:使用類加載器的getResource().getPath(),傳參直接獲取文件路徑,再根據(jù)文件路徑獲取文件流
     * 備注:jar包不可用,因?yàn)閖ar包中沒(méi)有一個(gè)實(shí)際的路徑存放文件
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    public BufferedReader function2(String fileName) throws IOException {

        //   /Users/zunf/code/read-resource/target/classes/%e6%b5%8b%e8%af%95.txt
        String filePath = this.getClass().getClassLoader().getResource(fileName).getPath();

        //可以看到上面讀取到路徑的中文被URLEncoder編碼了,所以需要先用URLDecoder解碼一下,恢復(fù)中文
        filePath = URLDecoder.decode(filePath, "UTF-8");

        return new BufferedReader(new FileReader(filePath));
    }

二、直接獲取文件流(jar包可用)

方法三:ClassLoader對(duì)象的getResourceAsStream()

    /**
     * 方法三:使用類加載器的getResourceAsStream(),直接獲取文件流
     * 備注:jar包可用
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    public BufferedReader function3(String fileName) throws IOException {
        //getResourceAsStream(fileName) 等價(jià)于getResource(fileName).openStream()
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(fileName);
        if (inputStream == null) {
            throw new FileNotFoundException(fileName);
        }
        return new BufferedReader(new InputStreamReader(inputStream));
    }

方法四:Class對(duì)象的getResourceAsStream()

  • ClassLoader 的getResource()是從類路徑的根路徑查找的,所以不加“/”也可以
  • Class 的getResource()是從當(dāng)前類所在的包路徑查找資源,所以如果不加“/”表示去根路徑查找的話,是找不到的
    /**
     * 方法四:使用Class對(duì)象的getResourceAsStream()獲取文件流
     * 備注:jar包可用
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    public BufferedReader function4(String fileName) throws IOException {
        //getResourceAsStream(fileName) 等價(jià)于getResource(fileName).openStream()
        InputStream inputStream = this.getClass().getResourceAsStream("/" + fileName);
        if (inputStream == null) {
            throw new FileNotFoundException(fileName);
        }
        return new BufferedReader(new InputStreamReader(inputStream));
    }

三、使用封裝好的類(jar包可用)

源碼里還是方法三、方法四,只不過(guò)做了一些封裝,更方便開(kāi)發(fā)

方法五:Spring提供的ClassPathResource

    /**
     * 方法五:使用Spring提供的ClassPathResource獲取
     * 備注:jar包可用
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    public BufferedReader function5(String fileName) throws IOException {
        ClassPathResource classPathResource = new ClassPathResource(fileName);
        InputStream inputStream = classPathResource.getInputStream();
        return new BufferedReader(new InputStreamReader(inputStream));
    }

方法六:Hutool提供的ResourceUtil

    /**
     * 方法六:使用Hutool的ResourceUtil
     * 備注:jar包可用
     *
     * @param fileName
     * @return
     * @throws IOException
     */
    public BufferedReader function6(String fileName) throws IOException {
        List<URL> resources = ResourceUtil.getResources(fileName);
        URL resource = resources.get(0);
        return new BufferedReader(new InputStreamReader(resource.openStream()));
    }

四、測(cè)試jar包中是否可用的代碼

1)編寫接口

   //Jar包啟動(dòng)時(shí)根據(jù)傳入的不同funcation值來(lái)選擇調(diào)用哪個(gè)方法測(cè)試
    @Value("${function}")
    private int function;    


    @GetMapping("/test")
    public String test() throws IOException {
        //需要在resource里讀取的文件
        String fileName = "測(cè)試.txt";

        //調(diào)用方法
        System.out.println("調(diào)用function" + function);
        BufferedReader bufferedReader = null;
        switch (function) {
            case 1:
                bufferedReader = function1(fileName);
                break;
            case 2:
                bufferedReader = function2(fileName);
                break;
            case 3:
                bufferedReader = function3(fileName);
                break;
            case 4:
                bufferedReader = function4(fileName);
                break;
            case 5:
                bufferedReader = function5(fileName);
                break;
            case 6:
                bufferedReader = function6(fileName);
                break;
            default:
        }

        //讀取并輸出
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            sb.append(line).append("\n");
        }
        System.out.println(sb);
        return sb.toString();
    }

2)啟動(dòng)jar包指令

java -jar -Dfunction=6 read-resource-1.0-SNAPSHOT.jar

  • 更改-Dfunction=6的值就能動(dòng)態(tài)切換方法了。

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

相關(guān)文章

  • java轉(zhuǎn)樹(shù)形結(jié)構(gòu)工具類詳解

    java轉(zhuǎn)樹(shù)形結(jié)構(gòu)工具類詳解

    這篇文章主要為大家詳細(xì)介紹了java轉(zhuǎn)樹(shù)形結(jié)構(gòu)工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 深入學(xué)習(xí)java位運(yùn)算的基礎(chǔ)知識(shí)

    深入學(xué)習(xí)java位運(yùn)算的基礎(chǔ)知識(shí)

    位運(yùn)算是直接對(duì)整數(shù)在內(nèi)存中的二進(jìn)制位進(jìn)行操作嗎,位運(yùn)算即可以節(jié)約內(nèi)存,同時(shí)使程序速度更快效率更高。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面我們來(lái)一起學(xué)習(xí)下吧
    2019-06-06
  • Java中StringBuilder類的介紹與常用方法

    Java中StringBuilder類的介紹與常用方法

    StringBuilder是一個(gè)可變的字符串的操作類,我們可以把它看成是一個(gè)對(duì)象容器,下面這篇文章主要給大家介紹了關(guān)于Java中StringBuilder類的介紹與常用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • java應(yīng)用開(kāi)發(fā)之JVM運(yùn)行時(shí)內(nèi)存分析

    java應(yīng)用開(kāi)發(fā)之JVM運(yùn)行時(shí)內(nèi)存分析

    這篇文章主要介紹了java應(yīng)用開(kāi)發(fā)之JVM運(yùn)行時(shí)內(nèi)存,文中附含圖文示例內(nèi)容分析非常簡(jiǎn)要,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • ShardingSphere結(jié)合MySQL實(shí)現(xiàn)分庫(kù)分表的項(xiàng)目實(shí)踐

    ShardingSphere結(jié)合MySQL實(shí)現(xiàn)分庫(kù)分表的項(xiàng)目實(shí)踐

    在實(shí)際開(kāi)發(fā)中,如果表的數(shù)據(jù)過(guò)大我們需要把一張表拆分成多張表,本文主要介紹了使用ShardingSphere實(shí)現(xiàn)MySQL分庫(kù)分表,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Java實(shí)現(xiàn)特定范圍的完數(shù)輸出算法示例

    Java實(shí)現(xiàn)特定范圍的完數(shù)輸出算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)特定范圍的完數(shù)輸出算法,簡(jiǎn)單說(shuō)明了完數(shù)的概念、計(jì)算原理并結(jié)合實(shí)例形式分析了java針對(duì)給定范圍內(nèi)的完數(shù)輸出操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-12-12
  • 解決Java中socket使用getInputStream()阻塞問(wèn)題

    解決Java中socket使用getInputStream()阻塞問(wèn)題

    這篇文章主要介紹了解決Java中socket使用getInputStream()阻塞問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • jackson 實(shí)現(xiàn)null轉(zhuǎn)0 以及0轉(zhuǎn)null的示例代碼

    jackson 實(shí)現(xiàn)null轉(zhuǎn)0 以及0轉(zhuǎn)null的示例代碼

    這篇文章主要介紹了jackson 實(shí)現(xiàn)null轉(zhuǎn)0 以及0轉(zhuǎn)null的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • 構(gòu)建多模塊的Spring Boot項(xiàng)目步驟全紀(jì)錄

    構(gòu)建多模塊的Spring Boot項(xiàng)目步驟全紀(jì)錄

    這篇文章主要給大家介紹了關(guān)于如何構(gòu)建多模塊的Spring Boot項(xiàng)目的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • SpringBoot整合支付寶APP支付

    SpringBoot整合支付寶APP支付

    這篇文章主要為大家詳細(xì)介紹了SpringBoot整合支付寶APP支付,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評(píng)論