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

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

代码如图

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

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

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

--youhow

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

时间: 2024-10-25 21:37:09

Java中Scanner的输入流的关闭问题的相关文章

java中scanner类的用法

在Eclipse中编写程序时,如果我们的变量是需要手动输入的时候,我们就可以用到scanner类了. Scanner类,这是一个用于扫描输入文本的新的实用程序.由于任何数据都必须通过同一模式的捕获组检索或通过使用一个索引来检索文本的各个部分.于是可以结合使用正则表达式和从输入流中检索特定类型数据项的方法.这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析.借助于Scanner,可以针对任何要处理的文本内容编写自定义的语法分析器.

Java中Scanner类的使用

一个可以解析基本类型和字符串的简单文本扫描器. 例如,以下代码使用户能够从 System.in 中读取一个数: public class ApiScanner { public static void main(String[] args) { //创建对象接收键盘录入的数据 Scanner sc = new Scanner(System.in);//创建一个scanner类的对象 //录入数据 System.out.print("请输入你的名字:"); String input =

Java中Scanner类在nextInt()后无法输入nextLine()的问题

首先,Scanner是一个扫描器,它扫描数据都是去内存中一块缓冲区中进行扫描并读入数据的,而我们在控制台中输入的数据也都是被先存入缓冲区中等待扫描器的扫描读取.这个扫描器在扫描过程中判断停止的依据就是“空白符”,空格啊,回车啊什么的都算做是空白符. nextInt()方法在扫描到空白符的时候会将前面的数据读取走,但会丢下空白符“\r”在缓冲区中,但是,nextLine()方法在扫描的时候会将扫描到的空白符一同清理掉. 了解了这两个方法特性和区别,就知道了上边的代码究竟是怎么回事,以及知道了解决的

java中scanner的正确用法

Scanner s = new Scanner(System.in); int choice = 0; if(s.hasNextInt()) { choice = s.nextInt(); } s.close();//关闭scanner

Java中Scanner的使用方法

Scanner是SDK1.5新增的一个类,但是使用该类创建一个对象.Scanner reader=new Scanner(System.in); 然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型: next.Byte(),nextDouble(),nextFloat,nextInt(),nextLin(),nextLong(),nextShot() 上述方法运行时都会造成阻塞,等待用户在命令行输入数据回车确认.比如,拥护在键盘输入12.34,hasNextFloat(

疑难杂症:Java中Scanner连续获取int和String型发生错误.

使用Scanner类获取输入,连续获取int类型和String类型数据时候,发生错误. Scanner sc = new Scanner(System.in); System.out.println("输入int类型"); int a = sc.nextInt(); System.out.println("输入String类型"); String s = sc.nextLine(); System.out.println(a); System.out.println

Java中Scanner类

基本格式: public boolean hasNextXxx():判断是否是某种类型的元素 public Xxx nextXxx():获取该元素 举例:用int类型的方法举例 public boolean hasNextInt() public int nextInt() 注意(): InputMismatchException:输入的和你想要的不匹配 public class ScannerDemo { public static void main(String[] args) { //创

Java中的Scanner类学习

转载自: Java中Scanner的nextInt(),next(),nextLine()方法总结 今天在java上机课时遇到了个小问题,使用Scanner输入数据时,使用了一次nextInt(),一次nextLine(),却只接收了一个整数.代码如下 code1: 1 package cn.dx; 2 3 import java.util.Scanner; 4 5 public class ScannerTest { 6 7 public static void main(String[] a

java中的nextline()

转自:gold_worker      http://www.cnblogs.com/gold-worker/archive/2013/04/10/3013063.html Java中Scanner的nextInt(),next(),nextLine()方法总结 今天在java上机课时遇到了个小问题,使用Scanner输入数据时,使用了一次nextInt(),一次nextLine(),却只接收了一个整数.代码如下 code1: 1 package cn.dx; 2 3 import java.u