【发布时间】:2016-02-06 22:05:51
【问题描述】:
System.in 是提供用户输入数据的“标准”输入流。一旦关闭,此流将无法重新打开。一个这样的例子是使用扫描仪读取用户输入的情况,如下所示:
public class Test {
public static void main(String[] args) {
boolean finished;
do {
Scanner inputScanner = new Scanner(System.in);
finished = inputScanner.hasNext("exit");
boolean validNumber = inputScanner.hasNextDouble();
if (validNumber) {
double number = inputScanner.nextDouble();
System.out.print(number);
} else if (!finished) {
System.out.println("Please try again.");
}
inputScanner.close();
} while (!finished);
}
}
在本例中,创建了一个Scanner 类型的实例,并用于从用户那里读取一系列数字(请忽略此代码中超出本例范围的其他细节,我知道扫描仪应该是在循环外创建和关闭)。从用户输入中检索到数字后,此Scanner 的实例(即输入流)将关闭。但是,当用户请求另一个号码并创建新实例时,无法再次打开输入流。在本例中,它会创建一个无限循环。
问题是:为什么不能重新打开已关闭的流?
【问题讨论】:
-
因为它的资源已经被释放回操作系统。为什么不打开扫描仪并在循环外关闭它?
-
我将链接您的previous question。这两个问题都不是重复的,因为第一个问题是“为什么我的扫描仪在每次迭代后都没有被阻止”。但是有一些有用的提示和解释可能对未来的读者有用,这里询问的问题是“为什么不能重新打开已关闭的流”。
标签: java