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

try-cache-finally讀取文件錯誤try-with-resources使用方法

 更新時間:2023年02月13日 09:13:45   作者:全村最野的狗  
這篇文章主要為大家介紹了try-cache-finally讀取文件錯誤try-with-resources使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

前些天項目經理找到我說,阿杰,你過來一下,我這有個小方法,你幫我寫一下

  • 需求: 提供一個文本文件,按行讀取,然后給出一個回調函數(shù),可以由調用者去實現(xiàn)對每行的處理.

我就想,你這不是瞧不起我嗎.5分鐘搞定!!嘴里卻說,你這個有點難,我需要研究下大概今天下班前能完成.

5分鐘過去了----> 代碼完成

摸魚3小時 ----> ok 代碼一發(fā),收工準備下班

public void clean2(String path, Consumer<String> consumer){
    FileReader fileReader = null;
    BufferedReader br = null;
    try{
        fileReader = new FileReader(path);
        br = new BufferedReader(fileReader);
        String line;
        while((line = br.readLine()) != null ){
            consumer.accept(line);
        }
    }catch (IOException e){
        // do
    }finally {
        try {
            if (br != null){
                br.close();
            }
            if (fileReader != null){
                fileReader.close();
            }
        } catch (IOException e) {
            // do
        }
    }
}

項目經理 ????????: 你tm明天別來了,自己去財務把這個月的結了,3行代碼就寫完的功能寫成這個鬼樣子.

那我就想啊,我寫的這么完美,那憑什么開除我,經過我九九八十一天的苦思冥想,終于找到了問題的原因!!

try-cache-finally

try-finally 是java SE7之前我們處理一些需要關閉的資源的做法,無論是否出現(xiàn)異常都要對資源進行關閉。*

如果try塊和finally塊中的方法都拋出異常那么try塊中的異常會被抑制(suppress),只會拋出finally中的異常,而把try塊的異常完全忽略。

這里如果我們用catch語句去獲得try塊的異常,也沒有什么影響,catch塊雖然能獲取到try塊的異常但是對函數(shù)運行結束拋出的異常并沒有什么影響。

try-with-resources

try-with-resources語句能夠幫你自動調用資源的close()函數(shù)關閉資源不用到finally塊。

前提是只有實現(xiàn)了Closeable接口的才能自動關閉

public void clean(String path, Consumer<String> consumer) throws IOException {
    try (BufferedReader br = new BufferedReader(new FileReader(path))) {
        String line;
        while((line = br.readLine()) != null ){
            consumer.accept(line);
        }
    }
}

這是try-with-resources語句的結構,在try關鍵字后面的( )里new一些需要自動關閉的資源。

這個時候如果方法 readLine 和自動關閉資源的過程都拋出異常,那么:

  • 函數(shù)執(zhí)行結束之后拋出的是try塊的異常,而try-with-resources語句關閉過程中的異常會被抑制,放在try塊拋出的異常的一個數(shù)組里。(上面的非try-with-resources例子拋出的是finally的異常,而且try塊的異常也不會放在fianlly拋出的異常的抑制數(shù)組里)
  • 可以通過異常的public final synchronized Throwable[] getSuppressed() 方法獲得一個被抑制異常的數(shù)組。
  • try塊拋出的異常調用getSuppressed()方法獲得一個被它抑制的異常的數(shù)組,其中就有關閉資源的過程產生的異常。

try-with-resources 語句能放多個資源,使用 ; 分割

try (
        BufferedReader br = new BufferedReader(new FileReader(path));
        ZipFile zipFile = new ZipFile("");
        FileReader fileReader = new FileReader("");
) {
}

最后任務執(zhí)行完畢或者出現(xiàn)異常中斷之后是根據(jù)new的反向順序調用各資源的close()的。后new的先關。

try-with-resources 語句也可以有 catch 和 finally 塊

public void clean3(String path, Consumer<String> consumer){
    try (BufferedReader br = new BufferedReader(new FileReader(path))) {
        System.out.println("RuntimeException 前");
        int a = 1/0;
        System.out.println("RuntimeException 后");
    }catch (RuntimeException e){
        System.out.println("拋出 RuntimeException");
    }catch (IOException e){
        System.out.println("拋出 RuntimeException");
    }finally {
        System.out.println("finally");
    }
}

RuntimeException 前
拋出 RuntimeException
finally 

以上就是try-cache-finally讀取文件錯誤try-with-resources使用方法的詳細內容,更多關于try-with-resources讀取文件的資料請關注腳本之家其它相關文章!

相關文章

  • Java的Spring框架中DAO數(shù)據(jù)訪問對象的使用示例

    Java的Spring框架中DAO數(shù)據(jù)訪問對象的使用示例

    這篇文章主要介紹了Java的Spring框架中DAO數(shù)據(jù)訪問對象的使用示例,分為在Spring中DOA與JDBC以及與Hibernate的配合使用兩種情況來進行演示,需要的朋友可以參考下
    2016-03-03
  • SpringBoot集成ip2region實現(xiàn)ip白名單的代碼示例

    SpringBoot集成ip2region實現(xiàn)ip白名單的代碼示例

    ip2region v2.0 - 是一個離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,10微秒級別的查詢效率,提供了眾多主流編程語言的 xdb 數(shù)據(jù)生成和查詢客戶端實現(xiàn),本文介紹了SpringBoot集成ip2region實現(xiàn)ip白名單的代碼工程,需要的朋友可以參考下
    2024-08-08
  • 多模塊項目使用枚舉配置spring-cache緩存方案詳解

    多模塊項目使用枚舉配置spring-cache緩存方案詳解

    這篇文章主要為大家介紹了多模塊項目使用枚舉配置spring-cache緩存的方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Jedis零基礎入門及操作Redis中的數(shù)據(jù)結構詳解

    Jedis零基礎入門及操作Redis中的數(shù)據(jù)結構詳解

    Jedis 的 API 方法跟 Redis 的命令基本上完全一致,熟悉 Redis 的操作命令,自然就很容易使用 Jedis,因此官方也推薦 Java 使用 Jedis 來連接和操作 Redis
    2022-09-09
  • SpringBoot整合Thymeleaf小項目及詳細流程

    SpringBoot整合Thymeleaf小項目及詳細流程

    這篇文章主要介紹了SpringBoot整合Thymeleaf小項目,本項目使用SpringBoot開發(fā),jdbc5.1.48,主要涉及到Mybatis的使用,Thymeleaf的使用,用戶密碼加密,驗證碼的設計,圖片的文件上傳(本文件上傳到本地,沒有傳到數(shù)據(jù)庫)登錄過濾,需要的朋友可以參考下
    2022-03-03
  • Springboot自定義mvc組件如何實現(xiàn)

    Springboot自定義mvc組件如何實現(xiàn)

    這篇文章主要介紹了Springboot自定義mvc組件如何實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • java圖片縮放實現(xiàn)圖片填充整個屏幕

    java圖片縮放實現(xiàn)圖片填充整個屏幕

    這篇文章主要介紹了java圖片縮放實現(xiàn)圖片填充整個屏幕,本文提供了兩種解決方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • spring-boot react如何一步一步實現(xiàn)增刪改查

    spring-boot react如何一步一步實現(xiàn)增刪改查

    這篇文章主要介紹了spring-boot react如何一步一步實現(xiàn)增刪改查,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java 字符串轉float運算 float轉字符串的方法

    Java 字符串轉float運算 float轉字符串的方法

    今天小編就為大家分享一篇Java 字符串轉float運算 float轉字符串的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • java通過MySQL驅動攔截器實現(xiàn)執(zhí)行sql耗時計算

    java通過MySQL驅動攔截器實現(xiàn)執(zhí)行sql耗時計算

    本文主要介紹了java通過MySQL驅動攔截器實現(xiàn)執(zhí)行sql耗時計算,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03

最新評論