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

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

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

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

? 開發(fā)中經(jīng)常會有文件相關的操作,比如說文件的查找,文件的存儲。

但是在使用中往往會因為路徑問題耽誤大量的開發(fā)時間。

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

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

項目工程如下:

1.Class和ClassLoader對于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("")獲取的是當前文件的路徑;
  • getResouce("/")獲取的是classes下的路徑,在spring中相當于/WEB-INF/classes/下;

ClassLoader:

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

2.getResourceAsStream()

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

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

3.Class.getResource()實現(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方法實際調用就是ClassLoader的getResource方法,只不過在調用前對文件名進行了額外的處理,將“”轉為了包路徑,“/”轉為了“”。

4.示例

    /**
     * 無內(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();
    }

總結

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

相關文章

  • java多線程JUC常用輔助類詳解

    java多線程JUC常用輔助類詳解

    這篇文章主要為大家介紹了java多線程及并發(fā)編程中JUC常用輔助類,文中附含詳細示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • Java中instance的用法詳解

    Java中instance的用法詳解

    這篇文章主要介紹了Java中instance的用法詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • 解決mysql字符串類型的數(shù)字排序出錯:cast(year as signed)

    解決mysql字符串類型的數(shù)字排序出錯:cast(year as signed)

    這篇文章主要介紹了解決mysql字符串類型的數(shù)字排序出錯問題 :cast(year as signed),如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringBoot YAML語法基礎詳細整理

    SpringBoot YAML語法基礎詳細整理

    YAML 是 “YAML Ain’t Markup Language”(YAML 不是一種標記語言)的遞歸縮寫。在開發(fā)的這種語言時,YAML 的意思其實是:“Yet Another Markup Language”(仍是一種標記語言),本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • springboot項目部署到寶塔的詳細圖文教程

    springboot項目部署到寶塔的詳細圖文教程

    網(wǎng)上關于寶塔運行springBoot的東西說有點迷糊,但是有一句話很重要,Spring boot項目只需要JDK環(huán)境即可部署成功,下面這篇文章主要給大家介紹了關于springboot項目部署到寶塔的詳細圖文教程,需要的朋友可以參考下
    2023-05-05
  • Token安全存儲的幾種方式小結

    Token安全存儲的幾種方式小結

    在現(xiàn)代 Web 應用中,身份認證與授權是確保系統(tǒng)安全性的重要部分,Token被廣泛應用,作為實現(xiàn)身份認證的主要方式,然而,如何安全地存儲這些 Token,是每個開發(fā)者在構建前端應用時必須考慮的問題,本文將深入探討Token安全存儲的幾種方式,需要的朋友可以參考下
    2025-04-04
  • Java中自定義泛型方法及其應用示例代碼

    Java中自定義泛型方法及其應用示例代碼

    泛型方法是Java中一個強大的特性,它允許我們在方法級別使用類型參數(shù),提高代碼的復用性和類型安全性,通過本文,讀者可以學習如何定義和使用泛型方法,并了解其在處理集合、比較對象、創(chuàng)建實例等任務中的應用,感興趣的朋友一起看看吧
    2025-02-02
  • 關于SpringBoot啟動速度慢的原因總結

    關于SpringBoot啟動速度慢的原因總結

    這篇文章主要介紹了關于SpringBoot啟動速度慢的原因總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 使用Feign調用時添加驗證信息token到請求頭方式

    使用Feign調用時添加驗證信息token到請求頭方式

    這篇文章主要介紹了使用Feign調用時添加驗證信息token到請求頭方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java連接mysql數(shù)據(jù)庫實現(xiàn)單條插入和批量插入

    java連接mysql數(shù)據(jù)庫實現(xiàn)單條插入和批量插入

    這篇文章主要為大家詳細介紹了java連接mysql數(shù)據(jù)庫實現(xiàn)單條插入和批量插入,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論

苍梧县| 东安县| 正定县| 磴口县| 浏阳市| 罗定市| 砚山县| 德钦县| 柞水县| 北海市| 余江县| 满城县| 松溪县| 玉屏| 麻江县| 茂名市| 湄潭县| 蓬莱市| 阿拉善左旗| 上思县| 德化县| 永胜县| 金湖县| 眉山市| 仙居县| 盐津县| 定兴县| 义乌市| 麻城市| 光泽县| 云梦县| 万源市| 陕西省| 平顶山市| 金湖县| 遂平县| 荔浦县| 小金县| 五家渠市| 洞头县| 二连浩特市|