我昨天问了这个问题。我想我得到了正确的答案,但其他答案之一给我留下了一个问题。如果我有这样的代码:
File file = new File("somefile.txt");
try (Scanner in = new Scanner(file)) {
//do something but don't explicitly call file.close()
}
这是错的吗?据我了解,如果该资源实现Closeable或AutoCloseable ,则try-with-resources语句将关闭该资源。在我看来,我将此等同于使用with语句在 Python 中打开文件资源。但是@David Newcomb 的回答说 Scanner 不是Closeable。
我查看了Java源代码,发现了这一行:
public final class Scanner implements Iterator<String>, Closeable {
这对我来说意味着我使用try-with-resources是安全的,并且文件资源将在 try 块结束时关闭,而无需显式调用file.close()。我是对的还是应该做些不同的事情?