java 从控制台输入密码

如果想从控制台读取用户输入,我们一般用Scanner 类留可以了,但是其输入是可见的,所以Scanner类不适用于从控制台读取密码。Java SE 6 引入了Console类实现这个目的。Java.lang.System类提供静态方法console()获取Console类的实例。

•static Console console()

Console类提供几个静态方法读取用户输入

不带提示信息读取一行输入

•static char[] readLine()

带提示信息和格式参数读取一行输入

•static String readLine(String prompt,  Object… args )

不带提示信息读取密码

•static char[] readPassword()

带提示信息和格式参数读取密码

•static char[] readPassword(String prompt,  Object… args )

注意:该方法只能在控制台命令行中使用,不能在java IDE中使用(会抛出java.lang.NullPointerException)。

下面给出示例:

public class TestConsole {
	public void testConsole() {
		// 获取Console对象
		Console cons = System.console();
		if(cons != null){
			System.out.println();
			// 输入用户名,后面的格式参数省略
			String name = cons.readLine("name: ");
			// 输入密码, 后面的格式参数省略
			char[] pwd = cons.readPassword("password: ");
			System.out.println("Hello! \nYour name is: " + name);
			System.out.println("Your password is: " + new String(pwd));
		} else {
			System.out.println("Couldn't get Console instance, maybe you're running this from within an IDE?");
			System.exit(0);
		}	
	}
	public static void main(String[] args) {
		new TestConsole().testConsole();
	}
}

测试结果如下:


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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值