BufferedReader可以在Java中自动关闭吗
Posted
技术标签:
【中文标题】BufferedReader可以在Java中自动关闭吗【英文标题】:Can BufferedReader be closed automatically in Java 【发布时间】:2014-02-03 13:20:11 【问题描述】:我收到有关资源泄漏的警告(BufferedReader 未关闭)。我通过在 Return 语句之前放置一个 close 语句并运行程序来解决这个问题。但我得到了一个 NullPointerException。我的问题是文件读取完成后是否可以自动关闭(以某种方式)。不过这个question 看起来很相似。
【问题讨论】:
IOUtils.closeQuietly()
在 finally
内
***.com/questions/17739362/…
我修复了我的代码,但只是想知道资源是否可以以某种方式自动关闭。
【参考方案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
的问题。
【讨论】:
以上是关于BufferedReader可以在Java中自动关闭吗的主要内容,如果未能解决你的问题,请参考以下文章
JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine
在Java中,BufferedReader 是一个啥类啊,有啥作用啊