关闭BufferedReader后仍然资源泄漏

时间:2014-02-06 19:05:10

标签: java io bufferedreader

我还在学习Java,我需要一些帮助来理解为什么这段代码是错的:

BufferedReader infile = new BufferedReader(new FileReader(file));
String regel = infile.readLine();
while (regel != null) {
    // Do something with regel.
    regel = infile.readLine();
}
infile.close();

我真的没有看到问题,但Eclipse一直在告诉资源泄漏并且infile没有关闭。

(还有一个细节,这段代码代表一个试块,但我把它留下来保持简单)

3 个答案:

答案 0 :(得分:3)

Eclipse抱怨,因为引用可能没有关闭(例如,在Exception中);这是您使用finally块的地方 - 也许就是这样

BufferedReader infile = null;
try {
  infile = new BufferedReader(new FileReader(file));
  String regel = infile.readLine();
  while (regel != null) {
    // Do something with regel.
    regel = infile.readLine();
  }
} catch (Exception e) {
  e.printStackTrace(); // Log the exception.
} finally {
  if (infile != null) {
    infile.close(); // close the resource.
  }
}

答案 1 :(得分:0)

你应该有一个try / catch块。

此外,您应该使用以下内容:

while ((line = reader.readLine()) != null) {
 //do something with line;
    }

答案 2 :(得分:0)

我认为Elliott Frisch是正确的,并指出我唯一要添加的主要原因是你应该关闭流(在finally块中)因为确保在输出成功的情况下刷新任何输出缓冲区。如果刷新失败,代码应该通过异常退出。这是另一个类似于您要解决的问题并确保您查看的示例(指南1-2:在所有情况下释放资源http://www.oracle.com/technetwork/java/seccodeguide-139067.html

    final OutputStream rawOut = new FileOutputStream(file);
    try {
        final BufferedOutputStream out =
            new BufferedOutputStream(rawOut);
        use(out);
        out.flush();
    } finally {
        rawOut.close();
    }