Comment lire les variables d'environnement dans Scala

158

En Java, la lecture des variables d'environnement se fait avec System.getenv().

Y a-t-il un moyen de faire cela dans Scala?

ampoule d'été
la source

Réponses:

232

Depuis Scala 2.9, vous pouvez utiliser sys.envpour le même effet:

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

Je pense que c'est bien d'utiliser l'API Scala au lieu de Java. Il existe actuellement plusieurs projets pour compiler Scala vers d'autres plates-formes que JVM (.NET, javascript, natif, etc.) La réduction des dépendances sur l'API Java rendra votre code plus portable.

paradigmatique
la source
96
Il est probablement préférable d'utiliser sys.env.get("VARIABLE")ce qui vous donnera Option[String]une erreur plutôt que de lancer une erreur si cette variable est manquante.
Cristian Vrabie
4
@CristianVrabie Je le préférerais aussi, dans la plupart des cas. Mais sys.envc'est juste un Map. Vous pouvez utiliser la méthode qui vous convient.
paradigmatic
3
sys.env.getOrElse("VARIABLE", "default value")était également utile dans mon cas où la variable d'environnement peut ne pas être définie.
Josh Peak
131

Il y a un objet:

scala.util.Properties

cela a une collection de méthodes qui peuvent être utilisées pour obtenir des informations sur l'environnement, y compris

scala.util.Properties.envOrElse("HOME", "/myhome" )
Andy
la source
3
Je préférerais également les propriétés. Il permet de récupérer des options et a des noms pour les propriétés couramment utilisées.
ppopoff
25

De la même façon:

scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg
dhg
la source
Maintenant que j'utilise Scala au quotidien, je dois déplacer la réponse acceptée vers la réponse de @ paradigmatic. Il utilise l'API Scala et s'il est utilisé comme suggéré dans les commentaires, il peut renvoyer une option.
summerbulb
11

En utilisant directement une valeur par défaut avec getOrElsesur la sys.envcarte ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Vous obtenez le contenu du envVariableou, s'il n'existe pas, le defaultValue.

victe
la source
0

Pour imprimer toutes les variables d'environnement, vous pouvez utiliser

System.getenv.forEach((name, value) => println(s"$name: $value"))
Matthias Braun
la source
1
error: missing parameter typesur les arguments si vous venez de copier-coller ceci.
thundergolfer
@thundergolfer: Je n'ai actuellement pas installé Scala sur ma machine. Avez-vous découvert ce qui manquait?
Matthias Braun
Après avoir changé les paramètres en (name: String, value: String), je reçois error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Roland Weber
1
Voici quelque chose qui fonctionne, mais qui nécessite une importation: alvinalexander.com/scala/…
Roland Weber