上QQ阅读APP看书,第一时间看更新
1.6.1 读取输入
当调用System.out.println时,输出被发送到“标准输出流”,从而在终端窗口中显示出来。如果要从“标准输入流”读取信息则没那么简单,因为对应的System.in对象只有一些读取单个字节的方法。为了读取字符串和数字,还需要构造一个能够连接到System.in对象的Scanner:
var in = new Scanner(System.in);
nextLine方法能够读取一整行输入:
System.out.println("What is your name?"); String name = in.nextLine();
这里使用nextLine方法的主要原因是输入中可能包含空格。如果要读取由空格分隔的单个单词,需要调用:
String firstName = in.next();
如果要读取整数,可以使用nextInt方法:
System.out.println("How old are you?"); int age = in.nextInt();
类似地,你也可以使用nextDouble方法读取下一个浮点数。可以使用hasNextLine、hasNext、hasNextInt和hasNextDouble方法检查是否有新的行、单词、整数或浮点数可用:
if (in.hasNextInt()) { int age = in.nextInt(); ... }
Scanner类位于java.util包中,为了使用这个类,应当在程序的开头添加以下代码:
import java.util.Scanner;
提示:如果要读取密码,你可能就不会想使用Scanner类了,因为Scanner类会使得输入在终端中可见。建议使用Console类,示例如下。
Console terminal = System.console(); String username = terminal.readLine("User name: "); char[] passwd = terminal.readPassword("Password: ");
这样用户输入的密码将以字符数组形式返回。这比将密码存储在String中更安全,因为可以在读取操作完成后重新处理数组。
提示:如果你想从文件中读取输入或将输出写入文件,可以使用shell的重定向语法。
java mypackage.MainClass < input.txt > output.txt
现在System.in将会从input.txt中读取信息,System.out向output.txt中写入信息。你将在第9章中看到如何执行更加通用的文件输入和输出操作。