Java中Scanner的输入流的关闭问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中Scanner的输入流的关闭问题相关的知识,希望对你有一定的参考价值。

为什么Scanner in语句只能关闭一次,且对于其他任何Scanner输入流也关闭?

代码如图

  1. import java.util.Scanner;  
  2.   
  3. public class ScannerTest {  
  4.   
  5.     public static void main(String[] args) {  
  6.         Scanner inputA = new Scanner(System.in);  
  7.         Scanner inputB = new Scanner(System.in);  
  8.         int numberA = input1.nextInt();  
  9.         int numberB = input1.nextInt();  
  10.         inputA.close();  
  11.         System.out.println(numberA);  
  12.         System.out.println(numberB);  
  13.     }  
  14.   
  15. }  

运行后java报错“java.util.NoSuchElementException.”

查阅API后可知 
System.in“标准”输入流。此输入流已打开并准备提供输入数据。通常,此输入流对应键盘输入、由主机环境或用户指定的另一个输入源。 
当inputA调用close()方法后,System.in这个流将会关闭,而这种关闭将是永久性的,导致之后将不能接受任何数据,从而引发java.util.NoSuchElementException的错误,而且将“Scanner inputB = new Scanner(System.in);”这行代码移动到“inputA.close();”后面依旧是同样的错误,则说明当流关闭一次后就再也无法重新打开了。

                                             --youhow

                                             如有错误敬请批评指正!谢谢!



以上是关于Java中Scanner的输入流的关闭问题的主要内容,如果未能解决你的问题,请参考以下文章

避免来自 Java 标准输入流的控制序列(如 ^[[C)

字符流;字节流;带缓冲的输入输出流;以及用scanner读文件

java中输出流不关闭为啥不能写入

java 输入输出流 一个类中只能使用一次吗? 流关闭后 就不能再打开吗?

java 输入输出流 一个类中只能使用一次吗? 流关闭后 就不能再打开吗?

java 读取输入流的时候cpu占用很高,怎么解决