Java的java.io.Console
类是用于读取控制台输入的类。在Java SE 5以前,读取控制台输入一般是使用System.in
和Scanner
类来实现的。但是这两种方式都有一些不足之处。使用System.in
缺乏一些高级特性,比如输入密码时隐藏用户输入的内容;而使用Scanner类需要把控制台输入的内容全部读入到内存中,当输入的内容较多时,会造成内存组塞或者卡顿。而Java SE 6推出的Console类可以解决上述问题。
使用Console类,需要先创建这个类的实例。使用System.console()
方法获取Console实例。如果在Eclipse中运行代码,则System.console()
可能返回null。可以使用System.in
和Scanner
作为备用方案,以保障代码的可靠性。
要使用Console类读取控制台输入,可以使用readLine()
方法读取一行字符串,或者使用readPassword()
方法来读取一行密码。同时,它还提供了一些其它实用方法,比如readLine()会根据输入的内容自动转换为相应的基本数据类型。
下面是几个示例,通过这些示例可以更好地理解Console类的使用方法。
import java.io.Console;
public class ConsoleDemo {
public static void main(String[] args) {
Console console = System.console();
if (console == null) {
System.out.println("无法使用控制台输入,使用Scanner代替...");
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
System.out.println("您输入的内容是:" + str);
} else {
String str = console.readLine("请输入字符串:");
System.out.println("您输入的内容是:" + str);
}
}
}
运行示例代码,输入一个字符串,程序会将输入的内容打印出来。
在上述示例代码中,首先获取控制台输入实例,并判断是否可以使用控制台输入。如果无法使用,则使用Scanner作为备选方案。取得控制台实例后,即可使用readLine()
方法读取一行字符串。
在实际应用中,有时候需要读取用户输入的敏感信息,比如密码。深入理解Console类之后,我们已经可以通过readPassword()方法来读取密码了。
import java.io.Console;
import java.util.Arrays;
public class PasswordDemo {
public static void main(String[] args) {
Console console = System.console();
if (console == null) {
System.out.println("无法使用控制台输入,使用Scanner代替...");
Scanner scanner = new Scanner(System.in);
System.out.println("输入密码:");
String str = scanner.next();
System.out.println("您输入的密码是:" + str);
} else {
char[] passwordArray = console.readPassword("请输入密码:");
System.out.println("您输入的密码是:" + new String(passwordArray));
Arrays.fill(passwordArray, ' ');//清空字符数组中的敏感信息
}
}
}
在上述示例代码中,首先获取控制台输入实例,并判断是否可以使用控制台输入。如果无法使用,则使用Scanner作为备选方案。取得控制台实例后,即可使用readPassword()方法读取一行密码。返回的是一个字符数组,我们可以将其转化为字符串,但同时需要注意清空字符数组中的敏感信息。
本文链接:http://task.lmcjl.com/news/13020.html