Scanner
文档说,当调用一个封闭的流时,next()
可能会抛出这两个异常:
NoSuchElementException - 如果没有更多令牌可用
IllegalStateException - 如果此扫描仪已关闭
此外hasNext()
可能会抛出此异常:
IllegalStateException - 如果此扫描仪已关闭
现在让我们假设我们有这个代码:
FileInputStream fis = new FileInputStream(new File("somefile"));
Scanner sc = new Scanner(fis);
// sc.close();
// sc = new Scanner(fis);
// somefile contents: word1 word2 word3
System.out.println(sc.next());
word1
这将按预期打印。如果我们取消注释sc.close(); sc = new Scanner(fis);
,NoSuchElementException
将在何时sc.next()
执行时抛出。
这种行为对我来说似乎很奇怪。不应该在关闭时hasNext()
抛出next()
一个?请解释为什么会这样。IllegalStateException
InputStream