Scalaで環境変数を読み取る方法


回答:


232

Scala 2.9以降sys.env、同じ効果を使用できます:

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

Javaの代わりにScala APIを使用するのが良いと思います。現在、JVM以外のプラットフォーム(.NET、javascript、ネイティブなど)にScalaをコンパイルするプロジェクトがいくつかあります。JavaAPIへの依存関係を減らすと、コードの移植性が高まります。


96
その変数が欠落している場合にエラーをスローするのではなく、を使用する方がおそらく良い方法sys.env.get("VARIABLE")ですOption[String]
クリスティアンヴラビー2013

4
@CristianVrabieほとんどの場合、私もそれを好みます。しかしsys.env、それだけMapです。あなたに適した方法なら何でもできます。
2013

3
sys.env.getOrElse("VARIABLE", "default value")環境変数が定義されていない可能性がある私の場合にも役立ちました。
ジョシュピーク

131

オブジェクトがあります:

scala.util.Properties

これには、環境情報を取得するために使用できるメソッドのコレクションが含まれます。

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

3
私もプロパティを好みます。これは、オプションを取得することを可能にし、一般的に使用されるプロパティの名前を持っています。
ppopoff

25

同じ方法:

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

Scalaを日常的に使用するようになったので、受け入れられた回答を@paradigmaticの回答に移動する必要があります。Scala APIを使用し、コメントで提案されているとおりに使用すると、オプションを返すことができます。
summerbulb 2015年

11

マップgetOrElse上でデフォルトを直接使用するsys.envval 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がインストールされていません。何が欠けているのか分かりましたか?
Matthias Braun

パラメータを(name: String, value: String)に変更すると、が表示されますerror: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String]
Roland Weber

1
ここでの何かその作品が、インポートが必要です。alvinalexander.com/scala/...
ローランド・ウェーバー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.