前言
今天学到了一个try-with-resources
结构,和传统的IO流一定要用.close()
不太一样,估计是.close()
的语法糖,参考来自《Is there a need to close resource if we use try-with-resource》。
正文
当IO操作文件的时候,对于Java 7 以后的版本而言有两种方法
- try-catch-finally
- 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.