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

Java如何獲取靜態(tài)資源文件路徑

 更新時(shí)間:2023年06月15日 15:48:31   作者:蠟筆沒(méi)了小新git  
這篇文章主要介紹了Java如何獲取靜態(tài)資源文件路徑問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java獲取靜態(tài)資源文件路徑

? 開(kāi)發(fā)中經(jīng)常會(huì)有文件相關(guān)的操作,比如說(shuō)文件的查找,文件的存儲(chǔ)。

但是在使用中往往會(huì)因?yàn)槁窂絾?wèn)題耽誤大量的開(kāi)發(fā)時(shí)間。

在實(shí)際中常常通過(guò)File file = new File(“c://a.txt”)方式來(lái)使用,但是切換環(huán)境后可能會(huì)遇到找不到該資源的問(wèn)題。

Java中,可以使用getResource()方法來(lái)獲取資源。

項(xiàng)目工程如下:

1.Class和ClassLoader對(duì)于getResouce()的區(qū)別?

public class ResourceTest {
    @Test
    public void test1() {
        // /Users/luojiacheng/code/translaction-test/target/test-classes/com/ljc/
        System.out.println(ResourceTest.class.getResource("").getPath());
        // /Users/luojiacheng/code/translaction-test/target/test-classes/
        System.out.println(ResourceTest.class.getResource("/").getPath());
        // /Users/luojiacheng/code/translaction-test/target/test-classes/
        System.out.println(ResourceTest.class.getClassLoader().getResource("").getPath());
        // null
        System.out.println(ResourceTest.class.getClassLoader().getResource("/"));
    }
}

Class:

  • getResource("")獲取的是當(dāng)前文件的路徑;
  • getResouce("/")獲取的是classes下的路徑,在spring中相當(dāng)于/WEB-INF/classes/下;

ClassLoader:

  • getResource("")獲取的是classes下的路徑,等同于Class.getResource("/");
  • getResouce("/")無(wú)法獲取。

2.getResourceAsStream()

public InputStream getResourceAsStream(String name) {
    URL url = getResource(name);
    try {
        return url != null ? url.openStream() : null;
    } catch (IOException e) {
        return null;
    }
}

getResourceAsStream()其實(shí)就是在getReource() + new InputStream()。

3.Class.getResource()實(shí)現(xiàn)

public java.net.URL getResource(String name) {
    // 獲取包路徑
    name = resolveName(name);
    ClassLoader cl = getClassLoader0();
    if (cl==null) {
        // A system class.
        return ClassLoader.getSystemResource(name);
    }
  	// "" -> com/.../    "/" -> ""
    return cl.getResource(name);
}

Class的getResouce方法實(shí)際調(diào)用就是ClassLoader的getResource方法,只不過(guò)在調(diào)用前對(duì)文件名進(jìn)行了額外的處理,將“”轉(zhuǎn)為了包路徑,“/”轉(zhuǎn)為了“”。

4.示例

    /**
     * 無(wú)內(nèi)容返回
     */
    @GetMapping("/getTextFromFile")
    public String getTextFromFile() throws IOException {
        String filePath = MyFileOperation.class.getResource("/a.txt").getPath();
        // **.jar!/BOOT-INF/classes!/a.txt
        System.out.println(filePath);
        File file = new File(filePath);
        StringBuilder s = new StringBuilder();
        if (file.exists()) {
            InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "gbk");
            BufferedReader bufferedReader = new BufferedReader(isr);
            String str;
            while ((str = bufferedReader.readLine()) != null) {
                s.append(str);
            }
        }
        return s.toString();
    }
    /**
     * 正確
     */
    @GetMapping("/getTextFromFileByStream")
    public String getTextFromFileByStream() throws IOException {
        StringBuilder s = new StringBuilder();
        InputStreamReader isr = new InputStreamReader( MyFileOperation.class.getResourceAsStream("/a.txt"), "gbk");
        BufferedReader bufferedReader = new BufferedReader(isr);
        String str;
        while ((str = bufferedReader.readLine()) != null) {
            s.append(str);
        }
        return s.toString();
    }

總結(jié)

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

相關(guān)文章

  • java基礎(chǔ)之字符串編碼知識(shí)點(diǎn)總結(jié)

    java基礎(chǔ)之字符串編碼知識(shí)點(diǎn)總結(jié)

    這篇文章主要介紹了java基礎(chǔ)之字符串編碼總結(jié),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,要的朋友可以參考下
    2021-04-04
  • java語(yǔ)言中封裝類代碼示例

    java語(yǔ)言中封裝類代碼示例

    這篇文章主要介紹了java語(yǔ)言中封裝類,涉及相關(guān)代碼示例及結(jié)果分析,以及封裝的好處簡(jiǎn)單介紹,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 手把手教你怎么創(chuàng)建spring項(xiàng)目

    手把手教你怎么創(chuàng)建spring項(xiàng)目

    今天教大家怎么寫spring項(xiàng)目,文中有非常詳細(xì)的圖文示例及介紹,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • 史上最佳springboot Locale 國(guó)際化方案

    史上最佳springboot Locale 國(guó)際化方案

    今天給大家分享史上最佳springboot Locale 國(guó)際化方案,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-08-08
  • Java面向?qū)ο蟪绦蛟O(shè)計(jì):繼承,多態(tài)用法實(shí)例分析

    Java面向?qū)ο蟪绦蛟O(shè)計(jì):繼承,多態(tài)用法實(shí)例分析

    這篇文章主要介紹了Java面向?qū)ο蟪绦蛟O(shè)計(jì):繼承,多態(tài)用法,結(jié)合實(shí)例形式分析了java繼承與多態(tài)的相關(guān)概念、原理、實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • jdk17?SpringBoot?JPA集成多數(shù)據(jù)庫(kù)的示例詳解

    jdk17?SpringBoot?JPA集成多數(shù)據(jù)庫(kù)的示例詳解

    這篇文章主要介紹了jdk17?SpringBoot?JPA集成多數(shù)據(jù)庫(kù)的示例代碼,包括配置類、請(qǐng)求攔截器、線程上下文等相關(guān)知識(shí),代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • springboot操作靜態(tài)資源文件的方法

    springboot操作靜態(tài)資源文件的方法

    這篇文章主要介紹了springboot操作靜態(tài)資源文件的方法,本文給大家提到了兩種方法,小編在這里比較推薦第一種方法,具體內(nèi)容詳情大家跟隨腳本之家小編一起看看吧
    2018-07-07
  • Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過(guò)程

    Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過(guò)程

    Ecppse 使用了 ESP-IDF 中的 Makefile 支持。這意味著您需要從創(chuàng)建 ESP-IDF 項(xiàng)目開(kāi)始。您可以使用 github 中的 idf-template 項(xiàng)目,接下來(lái)通過(guò)本文給大家介紹Windows系統(tǒng)下Eclipse搭建ESP32編譯環(huán)境及安裝過(guò)程,感興趣的朋友一起看看吧
    2021-10-10
  • Java輕量級(jí)權(quán)限認(rèn)證框架Sa-Token的使用

    Java輕量級(jí)權(quán)限認(rèn)證框架Sa-Token的使用

    Sa-Token是一個(gè)輕量級(jí)Java權(quán)限認(rèn)證框架,本文就詳細(xì)的來(lái)介紹一下Java輕量級(jí)權(quán)限認(rèn)證框架Sa-Token的使用,主要解決:登錄認(rèn)證、權(quán)限認(rèn)證、Session會(huì)話、單點(diǎn)登錄、OAuth2.0、微服務(wù)網(wǎng)關(guān)鑒權(quán)等,感興趣的可以了解一下
    2022-03-03
  • java基于jedisLock—redis分布式鎖實(shí)現(xiàn)示例代碼

    java基于jedisLock—redis分布式鎖實(shí)現(xiàn)示例代碼

    這篇文章主要介紹了jedisLock—redis分布式鎖實(shí)現(xiàn)示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11

最新評(píng)論