前言

今天学到了一个try-with-resources结构,和传统的IO流一定要用.close()不太一样,估计是.close()的语法糖,参考来自《Is there a need to close resource if we use try-with-resource》

正文

当IO操作文件的时候,对于Java 7 以后的版本而言有两种方法

  1. try-catch-finally
  2. try-with-resource

1. Try-Catch-Finally

使用try-catch-finally的时候需要再finally里面主动对文件进行close。

Scanner scanner = null;
try {
    scanner = new Scanner(new File("test.txt"));
    while (scanner.hasNext()) {
        System.out.println(scanner.nextLine());
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
} finally {
    if (scanner != null) {
        scanner.close();
    }
}

2. Try-With-Resource

然后使用try-wit-resource的时候,则不需要主动对文件进行close。

try (Scanner scanner = new Scanner(new File("test.txt"))) {
    while (scanner.hasNext()) {
        System.out.println(scanner.nextLine());
    }
} catch (FileNotFoundException fnfe) {
    fnfe.printStackTrace();
}

总结

学到了,原来IO里面没有close,不一定是错误的!除了try-catch-finally以外,还有一种结构叫做try-with-resource

更多参考博客《Java – Try with Resources》。O(∩_∩)O。

参考

[1] Is there a need to close resource if we use try-with-resource
[2] Java – Try with Resources

Q.E.D.


立志做一个有趣的碳水化合物