繁体   English   中英

Java扫描程序是否实现Closeable?

[英]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()
}

错了吗 据我了解,如果该资源实现CloseableAutoCloseable ,则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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM