簡體   English   中英

發生異常后如何關閉BufferedReader?

[英]How can I close a BufferedReader after an exception happed?

以一個簡單的代碼為例:

            FileInputStream fis = null;
            BufferedReader dr = null;
            try{
                fis = new FileInputStream("D:\\acc_cp.log");
                dr = new BufferedReader(new InputStreamReader(fis));
                producer = new LogProducer(); // it may throw an exception
                String line = "";
                while((line = dr.readLine())!= null ){ // readline may throw an exception too
                     producer.send("test", line);
                     Thread.sleep(50);
                }
            }catch(Exception e){
                e.printStackTrace();
            }finally{
                if(producer != null){
                    producer.close(); 
                }
            }

兩個producer = new LogProducer(); (line = dr.readLine())可能會引發異常。 所以,我的問題是,如果producer = new LogProducer(); 拋出異常,我想正確關閉BufferedReader,什么是合適的方法? 如果我將dr.close()放在catch子句或finally子句中,它將迫使我再次引發異常,顯然這不是一個好的解決方案。

您可以使用當前關閉producer (在finally塊中)的方式進行操作(如果不想重新拋出IOException ,則添加try-catch),例如

} finally {
    if(producer != null){
        producer.close(); 
    }
    if(dr != null) {
        try {
            dr.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

或者,你可以使用try-with-resources的語句close

try (FileInputStream fis = new FileInputStream("D:\\acc_cp.log");
    BufferedReader dr = new BufferedReader(new InputStreamReader(fis));
    LogProducer producer = new LogProducer()) {
    // ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM