如何在Scala中读取环境变量


Answers:


231

从Scala 2.9开始,您可以使用sys.env相同的效果:

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

我认为使用Scala API代替Java很好。当前有几个项目可以将Scala编译到JVM以外的其他平台(.NET,javascript,本机等)。减少对Java API的依赖关系将使您的代码更具可移植性。


95
如果缺少该变量,使用sys.env.get("VARIABLE")它可能会给您带来Option[String]错误而不是抛出错误,这可能是更好的做法。
Cristian Vrabie 2013年

4
@CristianVrabie在大多数情况下,我也希望这样做。但这sys.env只是一个Map。您可以选择任何适合您的方法。
范式

3
sys.env.getOrElse("VARIABLE", "default value")在我可能未定义环境变量的情况下也很有帮助。
乔什·匹克

131

有一个对象:

scala.util.Properties

它具有可用于获取环境信息的方法的集合,包括

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

3
我也更喜欢属性。它允许检索Optionals,并具有常用属性的名称。
ppopoff 2015年

25

同样的方法:

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

现在,我每天都使用Scala,我必须将接受的答案移至@paradigmatic的答案。它使用Scala API,并且如果按照注释中的建议使用,则可以返回一个Option。
summerbulb 2015年

11

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

sys.env.getOrElse(envVariable, defaultValue)

您将获得envVariable或(如果不存在)的内容defaultValue



0

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

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

1
error: missing parameter type在args上,如果您只复制粘贴此内容。
thundergolfer

@thundergolfer:我目前在我的机器上没有安装Scala。您知道丢失了什么吗?
马提亚斯·布劳恩

将参数更改为后(name: String, value: String),我得到了error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String]
罗兰·韦伯

1
这里的一些作品,但需要进口:alvinalexander.com/scala/...
罗兰·韦伯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.