noe*_*oel 1 java try-with-resources
我昨天问了这个问题.我想我得到了正确的答案,但其中一个答案给我留下了一个问题.如果我有这样的代码:
File file = new File("somefile.txt");
try (Scanner in = new Scanner(file)) {
//do something but don't explicitly call file.close()
}
Run Code Online (Sandbox Code Playgroud)
这是错的吗?根据我的理解,如果资源实现了Closeable或AutoCloseable,那么try-with-resources语句将关闭资源.在我看来,我将其等同于使用with语句在Python中打开文件资源.但是@David Newcomb的答案说Scanner不是可以关闭的.
我查看了Java源代码,我发现了这一行:
public final class Scanner implements Iterator<String>, Closeable {
Run Code Online (Sandbox Code Playgroud)
这对我来说意味着我使用try-with-resources是安全的,并且文件资源将在try块的末尾关闭而不显式调用file.close().我是对的还是我应该采取不同的做法?
所以现在我们毫不怀疑尝试资源会调用Scanner.close().现在让我们看一下Scanner.close API:
如果此扫描程序尚未关闭,那么如果其底层可读也实现了Closeable接口,则将调用可读的close方法.
由于Scanner是使用File参数创建的,因此它将在FileInputStream内部创建并自动关闭.File对象不需要关闭,因为它不是Closeable资源.
| 归档时间: |
|
| 查看次数: |
2735 次 |
| 最近记录: |