In Java, the System.getenv() returns an unmodifiable string Map
view of the current system environment.
Map<String, String> env = System.getenv();
// get PATH environment variable
String path = System.getenv("PATH");
1. Get a specified environment variable
1.1 Below example uses System.getenv
to get the JAVA_HOME
environment variable.
SystemEnv.java
package com.favtuts.system; public class SystemEnv { public static void main(String[] args) { // get a environment variable String java_home = System.getenv("JAVA_HOME"); System.out.println(java_home); } }
Output
/usr/lib/jvm/java-11-openjdk-amd64
1.2 If a requested environment variable is not defined, the System.getenv
will return a null
.
String java_home = System.getenv("JAVA_HOME"); if (java_home == null) { System.err.println("JAVA_HOME environment variable is not defined!"); } else { System.out.println(java_home); }
1.3 Java 8, Optional
example to handle the null
.
String JAVA_HOME = Optional.ofNullable(System.getenv("JAVA_HOME1")) .orElseThrow( () -> new IllegalArgumentException("Please defined JAVA_HOME environment variable."));
2. UnsupportedOperationException
The System.getenv()
returns an unmodifiable string Map
, modify the Map
will cause UnsupportedOperationException
.
SystemEnv.java
package com.favtuts.system; import java.util.Map; public class SystemEnv { public static void main(String[] args) { // Unmodifiable the map of environment variables Map<String, String> env = System.getenv(); // throws UnsupportedOperationException env.put("CUSTOM_JAVA_HOME", "/opt/java99/"); } }
Output
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.Collections$UnmodifiableMap.put(Collections.java:1457)
at com.favtuts.system.SystemEnv.main(SystemEnv.java:30)
3. Display all environment variables
The below example will print out all the available system environment variables.
SystemEnv.java
package com.favtuts.system; import java.util.Map; public class SystemEnv { public static void main(String[] args) { Map<String, String> env = System.getenv(); // Display all environment variables // Java 8 env.forEach((k, v) -> System.out.println(k + ":" + v)); // Classic way to loop a map for (Map.Entry<String, String> entry : env.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); } } }
Output
HOME:/home/tvt
PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
JAVA_HOME:/usr/lib/jvm/java-11-openjdk-amd64
PWD:/home/tvt/favtuts/java-core-tutorials-examples
4. Sort the environment variables
The below example will sort and display the environment variables in alphabetical order.
SystemEnv.java
package com.favtuts.system; import java.util.LinkedHashMap; import java.util.Map; import java.util.stream.Collectors; public class SystemEnv { public static void main(String[] args) { Map<String, String> env = System.getenv(); // sort and display the environment variables in alphabetical order LinkedHashMap<String, String> collect = env.entrySet().stream() .sorted(Map.Entry.comparingByKey()) .collect( Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new) ); collect.forEach((k, v) -> System.out.println(k + ":" + v)); } }
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-misc/system