2012-10-30 2 views
9

스칼라 프로그램에서 표준 입력에서 암호 문자열을 읽는 것이 필요합니다 (에코가 비활성화 됨). 나는 시도했다 :스칼라 콘솔에서 암호 읽기

java.io.Console.readPassword 

그러나 어떤 이유로 나는 스칼라에서 java.io.Console 객체의 모든 메소드를 호출 할 수 없습니다 (?).

스칼라의 표준 입력에서 문자열을 읽을 수있는 "표준"방법은 무엇입니까?

답변

13

콘솔 프롬프트에서 암호를 읽고 싶다고 가정하면 System (Console은 싱글 톤이 아님)에서 Console 인스턴스를 만들어야합니다. 더 import 때문에 스칼라의 타입 추론과 System는 기본적으로 범위가 이미 있다는 사실 필요가 없다는 것을

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

scala> val password = standardIn.readPassword() 

참고.

java.io.Console에 대한 자세한 내용은 javadoc을 참조하십시오.

편집는 : 컴파일 된 스칼라 프로그램에서 :

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() 
    } 
} 

는 실행/컴파일 :

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

덕분에 대답하십시오. 코드에서와 같이 REPL 도구에서 콘솔의 인스턴스를 가져올 수 있습니다. 그러나 Scala 프로그램 (또는 스칼라 워크 시트)에서 동일한 작업을 수행하려고하면 standardIn은 null 값을 가져옵니다. 이유는 모르겠다. – Sergio

+0

'standardIn'은 콘솔 객체이고,'getPassword' 메쏘드는 입력 된 암호의'char []'를 돌려줍니다. 필자가 작성한 예제 프로그램 예제를 추가 했으므로 제대로 작동하는 것으로 보입니다. – adelbertc