Cómo leer variables de entorno en Scala


Respuestas:


232

Desde Scala 2.9 puede usar sys.envpara el mismo efecto:

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

Creo que es bueno usar la API Scala en lugar de Java. Actualmente hay varios proyectos para compilar Scala en otras plataformas que no sean JVM (.NET, javascript, nativo, etc.) La reducción de las dependencias en la API de Java hará que su código sea más portátil.


96
Probablemente sea una mejor práctica usar lo sys.env.get("VARIABLE")que le dará Option[String]un error en lugar de arrojar un error si falta esa variable.
Cristian Vrabie

44
@CristianVrabie Yo también lo preferiría, en la mayoría de los casos. Pero sys.enves solo un Map. Puedes hacer cualquier método que sea apropiado para ti.
paradigmático

3
sys.env.getOrElse("VARIABLE", "default value")También fue útil en mi caso donde la variable de entorno puede no estar definida.
Josh Peak

131

Hay un objeto:

scala.util.Properties

Esto tiene una colección de métodos que se pueden utilizar para obtener información del entorno, incluyendo

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

3
También preferiría Propiedades. Permite recuperar los opcionales y tiene nombres para las propiedades de uso común.
ppopoff

25

Mismo camino:

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

Ahora que uso Scala a diario, debo mover la respuesta aceptada a la respuesta de @ paradigmatic. Utiliza Scala API y, si se usa como se sugiere en los comentarios, puede devolver una Opción.
summerbulb

11

Usando directamente un valor predeterminado con getOrElsesobre el sys.envMapa ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Obtiene el contenido de envVariableo, si no existe, el defaultValue.



0

Para imprimir todas las variables de entorno, puede usar

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

1
error: missing parameter typeen los argumentos si solo copia y pega esto.
Thundergolfer

@thundergolfer: Actualmente no tengo Scala instalado en mi máquina. ¿Te diste cuenta de lo que faltaba?
Matthias Braun

Después de cambiar los parámetros a (name: String, value: String), estoy obteniendo error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Roland Weber

1
Aquí hay algo que funciona, pero requiere una importación: alvinalexander.com/scala/…
Roland Weber
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.