2014-01-30 113 views
1

如果我調用一個BufferedReader方式如下:關閉一個BufferedReader

Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine()); 

請問JVM知道自動關閉它在不使用時?如果不是,我該如何關閉它?

+1

小心關閉任何包裝'System.in'的'InputStream'或'Reader'。那也將被關閉。 –

回答

4

如果您使用的是java 7或更高版本,並且您的代碼位於try catch resource區塊,則它是Auto closes

如果在以下版本中,您必須關閉close()。爲此,您必須更改當前的使用方式並獲取參考。

+2

用於AutoCloseable的+1 –

2

不要鏈接它們,聲明和分配變量,然後在使用後關閉它。

InputStreamReader isReader; 
BufferedReader bfReader; 
try { 
    isReader = new InputStreamReader(System.in); 
    bfReader = new BufferedReader(isReader).readLine(); 
} catch (Exception e) { 
// handle as per the requirement. 
} finally { 
    bfReader.close(); 
} 

如果您使用java 7,那麼,如果您使用try子句定義,那麼它們將自動關閉。檢查here更多細節

試戴與資源語句聲明一個 或多個資源的try語句。資源是作爲一個對象,必須在程序結束後關閉 。試用資源 語句確保在 語句結束時關閉每個資源。任何實現了java.lang.AutoCloseable的對象,其中包括所有實現java.io.Closeable的對象,都可以作爲 資源使用。

+3

它說[這裏](http://stackoverflow.com/questions/1388602/do-i-need-to-close-both-filereader-and-bufferedreader?rq=1)關閉BufferedReader會關閉InputStreamReader爲好。 – user2789772

+0

確實如此。 1)你應該只關閉這種類型的外部裝飾器,這裏是BufferedReader。 2)你當然不會推薦那個catch塊被忽略,對嗎? 3)我通常在結束之前檢查是否爲空。請記住,新手將從字面上理解你的代碼,包括空的catch塊。 –

+0

@HovercraftFullOfEels:應按照他的要求處理問題所有者。 –