Lesen von Umgebungsvariablen in Scala

155

In Java erfolgt das Lesen von Umgebungsvariablen mit System.getenv().

Gibt es eine Möglichkeit, dies in Scala zu tun?

Sommerbirne
quelle

Antworten:

231

Seit Scala 2.9 können Sie sys.envfür den gleichen Effekt verwenden:

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

Ich finde es schön, die Scala-API anstelle von Java zu verwenden. Derzeit gibt es mehrere Projekte, um Scala auf anderen Plattformen als JVM (.NET, Javascript, native usw.) zu kompilieren. Wenn Sie die Abhängigkeiten von der Java-API reduzieren, wird Ihr Code portabler.

paradigmatisch
quelle
95
Es ist wahrscheinlich eine bessere Vorgehensweise, sys.env.get("VARIABLE")die Ihnen Option[String]einen Fehler gibt, als einen Fehler auszulösen, wenn diese Variable fehlt.
Cristian Vrabie
4
@CristianVrabie Ich würde es in den meisten Fällen auch vorziehen. Ist sys.envaber nur ein Map. Sie können jede Methode wählen, die für Sie geeignet ist.
Paradigmatisch
2
sys.env.getOrElse("VARIABLE", "default value")war auch in meinem Fall hilfreich, in dem die Umgebungsvariable möglicherweise nicht definiert ist.
Josh Peak
131

Es gibt ein Objekt:

scala.util.Properties

Hier finden Sie eine Sammlung von Methoden, mit denen Umgebungsinformationen abgerufen werden können, einschließlich

scala.util.Properties.envOrElse("HOME", "/myhome" )
Andy
quelle
3
Ich würde auch Eigenschaften bevorzugen. Es ermöglicht das Abrufen von Optionen und verfügt über Namen für häufig verwendete Eigenschaften.
ppopoff
25

Gleicher Weg:

scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg
dhg
quelle
Jetzt, da ich Scala täglich benutze, muss ich die akzeptierte Antwort auf die Antwort von @ paradigmatic verschieben. Es verwendet die Scala-API und kann bei Verwendung wie in den Kommentaren vorgeschlagen eine Option zurückgeben.
Sommerbirne
10

Verwenden Sie direkt eine Standardeinstellung mit getOrElseüber sys.envMap ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Sie erhalten den Inhalt des envVariableoder, falls nicht vorhanden, des defaultValue.

victe
quelle
0

Zum Drucken aller Umgebungsvariablen können Sie verwenden

System.getenv.forEach((name, value) => println(s"$name: $value"))
Matthias Braun
quelle
1
error: missing parameter typeauf den Argumenten, wenn Sie dies nur kopieren und einfügen.
Thundergolfer
@thundergolfer: Ich habe Scala derzeit nicht auf meinem Computer installiert. Hast du herausgefunden, was fehlte?
Matthias Braun
Nachdem (name: String, value: String)ich die Parameter auf geändert habe , bekomme ich error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Roland Weber
1
Hier ist etwas, das funktioniert, aber einen Import erfordert: alvinalexander.com/scala/…
Roland Weber