Search code examples
javacommand-lineinputuser-inputcommand-prompt

Hide input on command line


I know that command line interfaces like Git and others are able to hide input from a user (useful for passwords). Is there a way to programmtically do this in Java? I'm taking password input from a user and I would like their input to be "hidden" on that particular line (but not on all of them). Here's my code for it (though I doubt it would be helpful...)

try (Scanner input = new Scanner(System.in)) {
  //I'm guessing it'd probably be some property you set on the scanner or System.in right here...
  System.out.print("Please input the password for " + name + ": ");
  password = input.nextLine();
}

Solution

  • Try java.io.Console.readPassword.

       /**
        * Reads a password or passphrase from the console with echoing disabled
        *
        * @throws IOError
        *         If an I/O error occurs.
        *
        * @return  A character array containing the password or passphrase read
        *          from the console, not including any line-termination characters,
        *          or <tt>null</tt> if an end of stream has been reached.
        */
        public char[] readPassword() {
            return readPassword("");
        }
    

    Beware though, this doesn't work with the Eclipse console. You'll have to run the program from a true console/shell/terminal/prompt to be able to test it.