2014-01-30 133 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:应按照他的要求处理问题所有者。 –