System.console() returns null

后端 未结 12 871
有刺的猬
有刺的猬 2020-11-22 04:55

I was using readLine of BufferedReader to get input/new password from user, but wanted to mask the password so I am trying to use java.io.Con

12条回答
  •  不思量自难忘°
    2020-11-22 05:43

    This code snippet should do the trick:

    private String readLine(String format, Object... args) throws IOException {
        if (System.console() != null) {
            return System.console().readLine(format, args);
        }
        System.out.print(String.format(format, args));
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                System.in));
        return reader.readLine();
    }
    
    private char[] readPassword(String format, Object... args)
            throws IOException {
        if (System.console() != null)
            return System.console().readPassword(format, args);
        return this.readLine(format, args).toCharArray();
    }
    

    While testing in Eclipse, your password input will be shown in clear. At least, you will be able to test. Just don't type in your real password while testing. Keep that for production use ;).

提交回复
热议问题