如何在 Scala 中读取环境变量

在 Java 中,读取环境变量是用 System.getenv()完成的。

在 Scala 中有办法做到这一点吗?

94893 次浏览

同样的道理:

scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg

因为 Scala 2.9,你可以使用 sys.env来达到同样的效果:

scala> sys.env("HOME")
res0: String = /home/paradigmatic

我认为使用 Scala API 而不是 Java 是很好的。目前有几个项目将 Scala 编译到 JVM 之外的其他平台(。NET、 javascript、原生等)减少对 JavaAPI 的依赖,将使您的代码更具可移植性。

有一个对象:

scala.util.Properties

这里有一组方法可以用来获取环境信息,包括

scala.util.Properties.envOrElse("HOME", "/myhome" )

如果使用 Lightend 的配置库(在 Play2和 Akka 中默认使用) ,那么您可以使用

Foo = “默认值” Foo = ${ ? VAR _ NAME }

语法来覆盖 foo,如果存在环境变量的 VAR _ NAME。 详情请参阅 https://github.com/typesafehub/config#optional-system-or-env-variable-overrides

要打印 所有环境变量,可以使用

System.getenv.forEach((name, value) => println(s"$name: $value"))

sys.env Map (val myenv: Map[String, String] = sys.env)上直接使用 getOrElse的默认值:

sys.env.getOrElse(envVariable, defaultValue)

获取 envVariable的内容,如果不存在,则获取 defaultValue的内容。

可以对 Java 系统属性使用 sys.props.getOrElse("key", "default")

  package scala


object sys {


/** A bidirectional, mutable Map representing the current system Properties.
*
*  @return   a SystemProperties.
*  @see      [[scala.sys.SystemProperties]]
*/
def props: SystemProperties = new SystemProperties


/** An immutable Map representing the current system environment.
*
*  @return   a Map containing the system environment variables.
*/
def env: immutable.Map[String, String] = immutable.Map(System.getenv().asScala.toSeq: _*)