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