【问题标题】:Can BufferedReader be closed automatically in JavaBufferedReader可以在Java中自动关闭吗
【发布时间】:2014-02-03 13:20:11
【问题描述】:

我收到有关资源泄漏的警告(BufferedReader 未关闭)。我通过在 Return 语句之前放置一个 close 语句并运行程序来解决这个问题。但我得到了一个 NullPointerException。我的问题是文件读取完成后是否可以自动关闭(以某种方式)。不过这个question 看起来很相似。

【问题讨论】:

标签: java exception nullpointerexception bufferedreader


【解决方案1】:

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

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

退出区块时会自动关闭

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

【讨论】:

  • 有趣!谢谢@Evgeniy
【解决方案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块,保证无论操作成功还是失败都会关闭。如果在创建资源时抛出了IOException,则需要null-check 来防止NPE。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 2013-04-22
    • 2016-09-30
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    相关资源
    最近更新 更多