2012-10-30 23 views
9

In un programma Scala ho bisogno di leggere dallo standard input una stringa di password (con echo disabilitato). Ho provato con:Lettura della password dalla console in Scala

java.io.Console.readPassword 

Ma per qualche motivo non riesco a richiamare tutti i metodi nell'oggetto java.io.Console da Scala (?).

Qual è il modo "standard" per leggere una stringa (con eco disattivato) dallo standard input in Scala?

risposta

13

Presumo che si desidera leggere la password dal prompt della console, quindi sarà necessario per creare un'istanza Console dal System (Console non è un Singleton).

scala> val standardIn = System.console() 
standardIn: java.io.Console = [email protected] 

scala> val password = standardIn.readPassword() 

Nota che nessun import è necessario a causa di inferenza di tipo di Scala e il fatto che System è già in ambito di default.

Consultare lo javadoc per java.io.Console per ulteriori informazioni.

EDIT: In un programma compilato Scala:

object ReadPassword { 
    def main(args: Array[String]) { 
    val standardIn = System.console() 
    println("standardIn object: " + standardIn) 

    print("Password> ") 
    val pw = standardIn.readPassword() 

    print("Password: ") 
    pw.foreach(print) // For demonstration purposes 
    println() 
    } 
} 

Compilazione/corsa:

$ scalac ReadPassword.scala 
$ scala ReadPassword 
standardIn object: [email protected] 
Password> 
Password: hello world 
+1

grazie per la risposta. Posso ottenere un'istanza della Console nello strumento REPL, come nel tuo codice. Tuttavia, se provo a fare lo stesso in un programma Scala (o in un foglio di lavoro Scala), standardIn ottiene un valore nullo. Non ho idea del perché. – Sergio

+0

'standardIn' è l'oggetto console, il metodo' getPassword' restituirà un 'char []' della password inserita. Ho aggiunto un esempio di un programma di esempio che ho scritto e sembrava funzionare bene. – adelbertc

Problemi correlati