2012-10-30 29 views
9

Trong chương trình Scala, tôi cần phải đọc từ đầu vào tiêu chuẩn một chuỗi mật khẩu (bị tắt tiếng bị tắt tiếng). Tôi đã thử với:Đọc mật khẩu từ giao diện điều khiển trong Scala

java.io.Console.readPassword 

Nhưng vì một lý do nào đó tôi không thể gọi bất kỳ phương thức nào trong đối tượng java.io.Console từ Scala (?).

Cách "chuẩn" nào để đọc chuỗi (bị tắt tiếng tắt tiếng) từ đầu vào chuẩn trong Scala?

Trả lời

13

Tôi giả sử bạn muốn đọc mật khẩu từ dấu nhắc bảng điều khiển, vì vậy bạn sẽ cần phải tạo một cá thể Console từ System (Console không phải là một singleton).

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

scala> val password = standardIn.readPassword() 

Lưu ý rằng không import là cần thiết vì suy luận kiểu Scala và thực tế là System là đã có trong phạm vi theo mặc định.

Tham khảo javadoc cho java.io.Console để biết thêm thông tin.

EDIT: Trong một chương trình Scala biên soạn:

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

Biên dịch/chạy:

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

nhờ để trả lời. Tôi có thể có được một thể hiện của Console trong công cụ REPL, như trong mã của bạn. Tuy nhiên, nếu tôi cố gắng làm tương tự trong một chương trình Scala (hoặc trong một bảng tính Scala), standardIn nhận được một giá trị null. Không biết tại sao. – Sergio

+0

'standardIn' là đối tượng điều khiển, phương thức' getPassword' sẽ trả về một 'char []' của mật khẩu được nhập vào. Tôi đã thêm một ví dụ về một chương trình mẫu tôi đã viết và nó dường như hoạt động tốt. – adelbertc

Các vấn đề liên quan