2016-09-06 3 views
3

Ich benutze System.console(), um Benutzerpasswort zu lesen.Java: Wie man Passwort von der Akte liest?

Mein Code:

Console console = System.console(); 
    if (console == null) { 
     throw new RuntimeException("No console is available for input"); 
    } 

    System.out.print("Enter the password: "); 
    String password = new String(console.readPassword()); 

Es funktioniert gut, wenn ich es einfach laufen lasse (von Redhat).

Das Problem ist, wenn ich versuche, das Passwort aus einer Textdatei zu lesen:

java -jar my_jar.jar < password.txt

ich:

Keine Konsole ist für die Eingabe zur Verfügung.

Wie kann ich es lösen?

+0

Das klingt wie ein bekannter Fehler/Problem: System.console gibt null zurück. Informationen und mögliche Problemumgehungen finden Sie in den Antworten auf diese Frage: http://stackoverflow.com/questions/4203646/system-console-returns-null – Akunosh

Antwort

0

Dieses Verhalten wird erwartet. Zitat von java.io.Console:

Ob eine virtuelle Maschine eine Konsole hat, ist abhängig von der zugrunde liegenden Plattform und auch von der Art und Weise, in der die virtuelle Maschine aufgerufen wird. Wenn die virtuelle Maschine von einer interaktiver Kommandozeile gestartet , ohne die Standardeingabe umgeleitet und Ausgangsströme dann wird seine Konsole besteht und werden in der Regel verbunden mit der Tastatur und Display, von dem die virtuellen Maschine ins Leben gerufen wurde.

Für eine mögliche Lösung ohne Cosole zu verwenden, können Sie diese Antwort Trying to read from the console in Java lesen.

Sie können die Konsole weiter verwenden, wenn sie vorhanden ist, und andernfalls auf BufferedReader/Scaner zurückfallen.

+0

Danke, aber ich möchte die Kennwortverschleierung Option verwenden Java Console bietet. –

+0

Sie können die Konsole weiterhin verwenden, wenn sie vorhanden ist, und ggf. zu BufferedReader/Scaner zurückkehren, falls dies nicht der Fall ist. Ich verstehe nicht, wie Sie "Passwortverschleierung Option Java Console bietet" verwenden können, wenn Sie keine Konsole haben. – chimmi

+0

Ich möchte nicht BufferedReader/Scaner verwenden, da ich dadurch gefährdet bin, dass der Benutzer das Passwort ohne Verschleierung setzt. Wie auch immer, Sie haben wahrscheinlich Recht und es gibt keine Lösung. Ich werde eine Option hinzufügen, um das Passwort in einer Textdatei zu senden. –

Verwandte Themen