Many operating systems use environment variables to pass configuration information to applications. Like properties in the Java platform, environment variables are key/value pairs, where both the key and the value are strings. The conventions for setting and using environment variables vary between operating systems, and also between command line interpreters. To learn how to pass environment variables to applications on your system, refer to your system documentation.Querying Environment Variables
On the Java platform, an application usesSystem.getEnv
to retrieve environment variable values. Without an argument,getEnv
returns a read-only instance ofjava.util.Map
, where the map keys are the environment variable names, and the map values are the environment variable values. This is demonstrated in theexample:
EnvMap
With aimport java.util.Map; public class EnvMap { public static void main (String[] args) { Map<String, String> env = System.getenv(); for (String envName : env.keySet()) { System.out.format("%s=%s%n", envName, env.get(envName)); } } }String
argument,getEnv
returns the value of the specified variable. If the variable is not defined,getEnv
returnsnull
. Theexample uses
Env
getEnv
this way to query specific environment variables, specified on the command line:public class Env { public static void main (String[] args) { for (String env: args) { String value = System.getenv(env); if (value != null) { System.out.format("%s=%s%n", env, value); } else { System.out.format("%s is not assigned.%n", env); } } } }Passing Environment Variables to New Processes
When a Java application uses aProcessBuilder
object to create a new process, the default set of environment variables passed to the new process is the same set provided to the application's virtual machine process. The application can change this set usingProcessBuilder.environment
.Platform Dependency Issues
There are many subtle differences between the way environment variables are implemented on different systems. For example, Windows ignores case in environment variable names, while UNIX does not. The way environment variables are used also varies. For example, Windows provides the user name in an environment variable calledUSERNAME
, while UNIX implementations might provide the user name inUSER
,LOGNAME
, or both.To maximize portability, never refer to an environment variable when the same value is available in a system property. For example, if the operating system provides a user name, it will always be available in the system property
user.name
.