这个Java代码段是否关闭了文件?

这个Java代码段是否关闭了文件?,java,file,Java,File,我在这里发现了一些编码: 我的问题是: 从“File.txt”创建文件对象会打开所述文件吗 如果是这样的话(我相对肯定会这样),代码片段会不会让文件保持打开状态 当程序终止后所述文件保持打开状态时会发生什么 当垃圾收集器完成其工作时,文件最终将被关闭,但您不确定这将在何时发生。在这种情况下,最好的做法是在try-catch-finally构造中与扫描器交互,并在finally块中关闭扫描器 try { scanner = new Scanner(file); // read

我在这里发现了一些编码:

我的问题是:

  • 从“File.txt”创建文件对象会打开所述文件吗
  • 如果是这样的话(我相对肯定会这样),代码片段会不会让文件保持打开状态
  • 当程序终止后所述文件保持打开状态时会发生什么

当垃圾收集器完成其工作时,文件最终将被关闭,但您不确定这将在何时发生。在这种情况下,最好的做法是在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会自动关闭扫描仪

也许您还想提到try with resource语句作为
Scanner
implements
Closeable
。感谢您的建议,它被添加了。从快速阅读try with resources判断,您应该执行以下操作:try(Scanner=new Scanner(new File(filename)){while(Scanner.hasnetline()){System.out.println()(scanner.nextLine())}
try (Scanner scanner = new Scanner(file)) {
    //read file contents 
} catch (Exception e) {
    // handle exceptions 
}