2012-10-30 12 views
9

W programie Scala muszę odczytać ze standardowego wejścia ciąg znaków hasła (z wyłączeniem echowania). Próbowałem z:Czytanie hasła z konsoli w Scali

java.io.Console.readPassword 

Ale z jakiegoś powodu nie może powoływać się żadnych metod w java.io.Console obiektu z Scala (?).

Jaki jest "standardowy" sposób odczytywania ciągu znaków (z wyłączeniem echa) ze standardowego wejścia w Scali?

Odpowiedz

13

Zakładam, że chcesz odczytać hasło z wiersza poleceń konsoli, więc musisz utworzyć instancję Console z poziomu System (Console nie jest to singleton).

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

scala> val password = standardIn.readPassword() 

Zauważ, że nie jest konieczne, ponieważ import typu wnioskowania Scala oraz fakt, że System jest już w zasięgu domyślnie.

Aby uzyskać więcej informacji, skonsultuj się z javadoc dla java.io.Console.

EDIT: W skompilowanego programu 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() 
    } 
} 

Kompilacja/jazdy:

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

dzięki za odpowiedzi. Mogę pobrać instancję konsoli w narzędziu REPL, tak jak w twoim kodzie. Jeśli jednak spróbuję zrobić to samo w programie Scala (lub arkuszu Scala), standardIn pobiera wartość pustą. Nie mam pojęcia dlaczego. – Sergio

+0

'standardIn' jest obiektem konsoli, metoda' getPassword' zwróci 'char []' wprowadzonego hasła. Dodałem przykładowy przykładowy program, który napisałem i wydawało się, że działa dobrze. – adelbertc