Como ler variáveis ​​de ambiente no Scala


Respostas:


232

Desde o Scala 2.9, você pode usar sys.envo mesmo efeito:

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

Eu acho que é bom usar a API Scala em vez de Java. Atualmente, existem vários projetos para compilar o Scala em outras plataformas além da JVM (.NET, javascript, nativo etc.) Reduzir as dependências da API Java, tornará seu código mais portátil.


96
Provavelmente, é uma prática melhor usar, o sys.env.get("VARIABLE")que causará Option[String]um erro, em vez de gerar, se essa variável estiver ausente.
Cristian Vrabie

4
@CristianVrabie Eu também preferiria, na maioria dos casos. Mas sys.envé apenas um Map. Você pode qualquer método que seja apropriado para você.
24913 paradigmático

3
sys.env.getOrElse("VARIABLE", "default value")também foi útil no meu caso em que a variável de ambiente pode não estar definida.
Josh Peak

131

Existe um objeto:

scala.util.Properties

isso possui uma coleção de métodos que podem ser usados ​​para obter informações sobre o ambiente, incluindo

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

3
Eu também preferiria Propriedades. Ele permite recuperar opcionais e possui nomes para propriedades comumente usadas.
ppopoff

25

Da mesma maneira:

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

Agora que uso Scala diariamente, devo mover a resposta aceita para a resposta da @ paradigmatic. Ele usa a API Scala e, se usado como sugerido nos comentários, pode retornar uma opção.
summerbulb

11

Usando diretamente um padrão com getOrElseover the sys.envMap ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Você obtém o conteúdo do envVariableou, se não existir, o defaultValue.



0

Para imprimir todas as variáveis ​​de ambiente, você pode usar

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

1
error: missing parameter typenos argumentos se você apenas copiar e colar isso.
Thundergolfer 16/04/19

@ thundergolfer: Atualmente, não tenho o Scala instalado na minha máquina. Você descobriu o que estava faltando?
Matthias Braun

Depois de alterar os parâmetros para (name: String, value: String), estou recebendo error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Roland Weber

1
Aqui está algo que funciona, mas requer uma importação: alvinalexander.com/scala/…
Roland Weber
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.