从Scala中的控制台读取密码

Ser*_*gio 13 scala input

在Scala程序中,我需要从标准输入中读取密码字符串(禁用回显).我尝试过:

java.io.Console.readPassword
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,我不能java.io.Console从Scala(?)调用对象中的任何方法.

从Scala中的标准输入读取字符串(带有回显禁用)的"标准"方法是什么?

ade*_*rtc 16

我假设您要从控制台提示符读取密码,因此您需要ConsoleSystem(Console不是单例)创建实例.

scala> val standardIn = System.console()
standardIn: java.io.Console = java.io.Console@69d1964d

scala> val password = standardIn.readPassword()
Run Code Online (Sandbox Code Playgroud)

请注意,import由于Scala的类型推断以及System默认情况下已在范围内的事实,因此不需要.

咨询的Javadocjava.io.Console更多信息.

编辑:在编译的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()
  }
}
Run Code Online (Sandbox Code Playgroud)

编译/运行:

$ scalac ReadPassword.scala
$ scala ReadPassword
standardIn object: java.io.Console@311671b2
Password> 
Password: hello world
Run Code Online (Sandbox Code Playgroud)

  • 谢谢回答。如您的代码所示,我可以在REPL工具中获得Console的实例。但是,如果我尝试在Scala程序(或Scala工作表)中执行相同的操作,则standardIn将获得空值。不知道为什么。 (3认同)