Can BufferedReader可以在Java中自动关闭

时间:2014-02-03 13:20:12

标签: java exception nullpointerexception bufferedreader

我收到了资源泄漏警告(BufferedReader未关闭)。我通过在Return语句之前放置一个close语句并运行程序来修复它。但是我得到了一个N​​ullPointerException。我的问题是它可以在文件读取完成后自动关闭(不知何故)。这个question看起来很相似。

2 个答案:

答案 0 :(得分:8)

您可以使用try-with-resources Java 7功能:

try(BufferedReader rdr = new BufferedReader(...)) {
     ...
}

退出块

时会自动关闭

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

答案 1 :(得分:2)

在java 7之前,可关闭IO资源的一般模式如下:

Resource r = null; // either stream, reader, writer etc
try { 
    r = ... // create resource
    use resource r
} catch(IOException e) {
   // some code
} finally {
    if (r != null) {
         r.close();
    }
}

该资源在finally块中使用,以确保无论操作是成功完成还是失败,它都将被关闭。 null - 如果在创建资源时抛出IOException,则需要检查以防止NPE。

Java 7引入了一种新语法,它会产生“自动”关闭资源的错觉:

try (
    Resource r = // create resource
){ 
    use resource r
} catch(IOException e) {
   // some code
} 

finally块实际上是由编译器自动添加的。

我希望这可以回答您关于自动关闭BufferedReader的问题。