0

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()一个?请解释为什么会这样。IllegalStateExceptionInputStream

4

1 回答 1

1

您似乎误解了Scanner的文档。它说如果没有更多可用的令牌,next()将抛出一个;NoSuchElementException当底层流结束或已关闭时就是这种情况。IllegalStateException如果扫描仪本身已关闭,它只会抛出一个- 这在您的问题中不会发生。

于 2016-03-12T06:59:20.170 回答