JDK6中提供了java.io.Console类专用来访问基于字符的控制台设备。
如果你的Java程序要与Windows下的cmd或者Linux下的Terminal交互,就可以用Console类代劳。
TestConsole.java 代码:
package
com.simon.testjdk6.console;
import
java.io.Console;
public
class
TestConsole {
public
static
void
main(String[] args) {
Console console = System.console();
if
(console !=
null
) {
String user =
new
String(console.readLine(
"Enter username:"
));
String pwd =
new
String(console.readPassword(
"Enter passowrd:"
));
console.printf(
"Username is: "
+ user +
"\n"
);
console.printf(
"Password is: "
+ pwd +
"\n"
);
}
else
{
System.out.println(
"Console is unavailable."
);
}
}
}
Java要与Console进行交互,不总是能得到可用的Console的。一个JVM是否有可用的Console,依赖于底层平台和JVM如何被调用。如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就我们可以得到一个可用的Console实例。
当你有Eclipse或NetBean中运行以上代码时Console中将会有以下文字输出:
表示Java程序无法获得Console实例,是因为JVM不是在命令行中被调用的,或者输入输出被重定向了。
在控制台中运行代码,效果将如下所示:
$ java com.simon.testjdk6.console.TestConsole
Enter user:Simon
Enter passowrd:
User is:Simon
Password is:12345
|
我们可以看到:输入密码时,控制台时不显示我们所输入的密码字符。但是程序可以得到并输出的密码字符串。