[英]Does Java scanner implement Closeable?
我昨天问了这个问题 。 我认为我得到了正确的答案,但是其他答案之一让我提出了一个问题。 如果我有这样的代码:
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无法关闭 。
我查看了Java源代码,发现以下行:
public final class Scanner implements Iterator<String>, Closeable {
对我来说,这意味着我可以安全地使用try-with-resources ,并且文件资源将在try块的末尾关闭,而无需显式调用file.close() 。 我是对的还是应该做一些不同的事情?
因此,现在我们毫无疑问try-with-resources将调用Scanner.close()
。 现在让我们看一下Scanner.close API:
如果尚未关闭此扫描器,则如果其基础可读文件也实现了Closeable接口,则将调用该可读文件的close方法。
由于Scanner是使用File参数创建的,因此它将在内部创建FileInputStream
并自动将其关闭。 文件对象不需要关闭,因为它不是可关闭资源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.