Come leggere le variabili d'ambiente in Scala


158

In Java, la lettura delle variabili di ambiente viene eseguita con System.getenv().

C'è un modo per farlo a Scala?

Risposte:


232

Da Scala 2.9 puoi usare sys.envper lo stesso effetto:

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

Penso che sia bello usare l'API Scala invece di Java. Attualmente ci sono diversi progetti per compilare Scala su piattaforme diverse da JVM (.NET, javascript, nativo, ecc.) La riduzione delle dipendenze dall'API Java renderà il tuo codice più portabile.


96
Probabilmente è meglio usare la pratica sys.env.get("VARIABLE")che ti darà Option[String]un errore piuttosto che generare un errore se manca quella variabile.
Cristian Vrabie,

4
@CristianVrabie Lo preferirei anche, nella maggior parte dei casi. Ma sys.envè solo un Map. Puoi qualunque metodo sia adatto a te.
paradigmatico

3
sys.env.getOrElse("VARIABLE", "default value")è stato utile anche nel mio caso in cui la variabile d'ambiente non può essere definita.
Josh Peak,

131

C'è un oggetto:

scala.util.Properties

questo ha una raccolta di metodi che possono essere usati per ottenere informazioni sull'ambiente, incluso

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

3
Preferirei anche Proprietà. Permette di recuperare Optionals e ha nomi per le proprietà comunemente usate.
ppopoff,

25

Stessa strada:

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

Ora che uso Scala ogni giorno, devo spostare la risposta accettata alla risposta di @ paradigmatic. Utilizza l'API Scala e se utilizzato come suggerito nei commenti può restituire un'opzione.
summerbulb

11

Utilizzando direttamente un valore predefinito con getOrElseover the sys.envMap ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Ottieni il contenuto di envVariableo, se non esiste, di defaultValue.



0

Per stampare tutte le variabili di ambiente, è possibile utilizzare

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

1
error: missing parameter typesull'args se lo copia e incolla.
thundergolfer

@thundergolfer: al momento non ho Scala installato sul mio computer. Hai capito cosa mancava?
Matthias Braun,

Dopo aver modificato i parametri in (name: String, value: String), sto ottenendo error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Roland Weber,

1
Ecco qualcosa che funziona, ma richiede un'importazione: alvinalexander.com/scala/…
Roland Weber,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.