54

My OS is windows7. I want to read the environment variables in my Java application. I have searched google and many people's answer is to use the method System.getProperty(String name) or System.getenv(String name). But it doesn't seem to work. Through the method, I can read some variable's value that defined in the JVM.

If I set an environment variable named "Config", with value "some config information", how can I get the value in Java?

8
  • 3
    System.getenv() is the correct call to use. Commented Dec 16, 2013 at 11:44
  • 5
    possible duplicate of stackoverflow.com/questions/461018/… Commented Dec 16, 2013 at 11:47
  • 6
    Also please be aware that if you modify an env variable in windows, you may need to restart your console (or your editor, like IDEA?) for the change to properly kick in. Commented Dec 16, 2013 at 11:48
  • Each process has it's own environment variables. If you set it in one process it will not magically appear or change another. It appears you should be using something else like a Properties file for your setting. Commented Dec 16, 2013 at 11:54
  • Instead of voting to close this as duplicate, go and close the linked question as duplicate of this, because this has much better answer. Commented Dec 16, 2013 at 12:11

2 Answers 2

83

You should use System.getenv(), for example:

import 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)); } } } 

When running from an IDE you can define additional environment variable which will be passed to your Java application. For example in IntelliJ IDEA you can add environment variables in the "Environment variables" field of the run configuration.

Notice (as mentioned in the comment by @vikingsteve) that the JVM, like any other Windows executable, system-level changes to the environment variables are only propagated to the process when it is restarted.

For more information take a look at the "Environment Variables" section of the Java tutorial.

System.getProperty(String name) is intended for getting Java system properties which are not environment variables.

Sign up to request clarification or add additional context in comments.

5 Comments

@drorb The problem why i can't get the “Environment Variables” is really because i did't restart my IDE.T^T
Same for me. Had to restart the IDE.
Can you show how to read a single env variable by name? I assume it's something like: System.getenv().get("foo");?
@AlexanderMills Check out the second answer: String myEnv = System.getenv("env_name");
system properties are not the same as environment variables. Thanks @DrorBereznitsky
69

In case anyone is coming here and wondering how to get a specific environment variable without looping through all of your system variables you can use getenv(String name). It returns "the string value of the variable, or null if the variable is not defined in the system environment".

String myEnv = System.getenv("env_name"); 

1 Comment

Is it OS independent ?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.