3.7.1 读取输入

前面已经看到,打印输出到“标准输出流”(即控制台窗口)是一件非常容易的事情,只要调用System.out.println即可。然而,读取“标准输入流”System.in就没有那么简单了。要想通过控制台进行输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联。

(构造器和new操作符将在第4章中详细地介绍。)

现在,就可以使用Scanner类的各种方法实现输入操作了。例如,nextLine方法将输入一行。

在这里,使用nextLine方法是因为在输入行中有可能包含空格。要想读取一个单词(以空白符作为分隔符),就调用

要想读取一个整数,就调用nextInt方法。

与此类似,要想读取下一个浮点数,就调用nextDouble方法。

在程序清单3-2的程序中,询问用户姓名和年龄,然后打印一条如下格式的消息:

最后,在程序的最开始添加上一行:

Scanner类定义在java.util包中。当使用的类不是定义在基本java.lang包中时,一定要使用import指示字将相应的包加载进来。有关包与import指示字的详细描述请参看第4章。

程序清单3-2 InputTest/InputTest.java

注释:因为输入是可见的,所以Scanner类不适用于从控制台读取密码。Java SE 6特别引入了Console类实现这个目的。要想读取一个密码,可以采用下列代码:

为了安全起见,返回的密码存放在一维字符数组中,而不是字符串中。在对密码进行处理之后,应该马上用一个填充值覆盖数组元素(数组处理将在本章稍后介绍)。

采用Console对象处理输入不如采用Scanner方便。每次只能读取一行输入,而没有能够读取一个单词或一个数值的方法。

API java.util.Scanner 5.0

·Scanner(InputStream in)

用给定的输入流创建一个Scanner对象。

·String nextLine()

读取输入的下一行内容。

·String next()

读取输入的下一个单词(以空格作为分隔符)。

·int nextInt()

·double nextDouble()

读取并转换下一个表示整数或浮点数的字符序列。

·boolean hasNext()

检测输入中是否还有其他单词。

·boolean hasNextInt()

·boolean hasNextDouble()

检测是否还有表示整数或浮点数的下一个字符序列。

API java.lang.System 1.0

·static Console console()6

如果有可能进行交互操作,就通过控制台窗口为交互的用户返回一个Console对象,否则返回null。对于任何一个通过控制台窗口启动的程序,都可使用Console对象。否则,其可用性将与所使用的系统有关。

API java.io.Console 6

·static char[]readPassword(String prompt,Object...args)

·static String readLine(String prompt,Object...args)

显示字符串prompt并且读取用户输入,直到输入行结束。args参数可以用来提供输入格式。有关这部分内容将在下一节中介绍。