此Java代码段是否关闭文件?

时间:2018-07-09 18:19:13

标签: java file

我在这里找到了一些编码: Java: Printing from a file

Scanner fRead = new Scanner(new File(targetFileName));
while (fRead.hasNextLine())
  System.out.println(fRead.nextLine());

我的问题:

  • 从'file.txt'创建File对象是否打开所述文件?
  • 如果是这样(我相对确定会),摘要是否不会使该文件保持打开状态?
  • 在程序终止后打开该文件会发生什么?

1 个答案:

答案 0 :(得分:2)

当垃圾收集器完成其工作时,文件最终将关闭,但是您不确定何时会发生。在这种情况下,最好的办法是在try-catch-finally结构中与扫描仪进行交互,然后在finally块中将其关闭。

try {
    scanner = new Scanner(file);
    // read contents
} catch (Exception ex) {
    // handle problems 
} finally {
    // close the scanner
    scan.close();
}

正如注释中所建议的那样,从Java 7开始,可以使用新引入的try-with-resources构造简化代码,如下所示:

try (Scanner scanner = new Scanner(file)) {
    //read file contents 
} catch (Exception e) {
    // handle exceptions 
}

在这种情况下,您不需要显式关闭扫描仪,因为Java会自动关闭扫描仪。