1. Overview

In this tutorial, we are going to see how we can read environment variables in Scala.

Environment variables allow us to define values for given keys on the OS, which applications can read. We typically use them for some configurations, such as the path where to read a file.

2. Reading Environment Variables

As in most programming languages, Scala allows us to read environment variables. There are a few different ways to do it, but they are very similar, so it’s a matter of personal preference more than anything.

2.1. Using Scala’s sys Object

The most common and idiomatic way to read environment variables in Scala is by using the sys package object, which puts the environment variables into an immutable. Map[String, String]:

scala> sys.env
res0: scala.collection.immutable.Map[String,String] = HashMap(JAVA_MAIN_CLASS_27606 -> scala.tools.nsc.MainGenericRunner, PWD -> /private/tmp, JAVA_ARCH -> x86_64)

scala> sys.env.get("PWD")
res1: Option[String] = Some(/private/tmp)

The scala sys object is just a thin wrapper around the java code we saw in the previous section, but it makes things much more idiomatic as it doesn’t return nulls if the variable doesn’t exist.

2.2. Using Scala’s Properties Object

There’s still another way to read environment variables, although not that common. It consists of using scala.util.Properties object:

scala> scala.util.Properties.envOrElse("PWD", "undefined")
res0: String = /private/tmp

scala> scala.util.Properties.envOrElse("RANDOM-VAR-FOO", "undefined")
res1: String = undefined

scala> scala.util.Properties.envOrNone("PWD")
res2: Option[String] = Some(/private/tmp)

2.3. Using Java’s System Object

Since Scala offers interoperability with Java, we can use the same utilities from Java:

scala> System.getenv()
res0: java.util.Map[String,String] = {JAVA_ARCH=x86_64, JAVA_MAIN_CLASS_27606=scala.tools.nsc.MainGenericRunner, PWD=/private/tmp}

scala>  System.getenv("PWD")
res1: String = /private/tmp

scala>  System.getenv("RANDOM-VAR-FOO")
res2: String = null

3. Conclusion

In this article, we saw the different ways to read environment variables in Scala. While there are a few ways to do it, they are very similar and straightforward.

Inline Feedbacks
View all comments