Как перечислить все переменные окружения в Java - PullRequest
20 голосов
/ 15 сентября 2011

System.getenv(name) требуется имя переменной среды.

Я пытаюсь вызвать Runtime.exec(String[], String[], File), дополнительному параметру нужен массив переменных среды, я не уверен, будет ли подпроцесс наследовать переменные среды от текущего процессаесли я указал этот параметр.

Например, если я передаю new String[]{"NEWDIR=/home"} в качестве вторичного параметра, а текущий процесс Java имеет среду OLDDIR=/var, каково возвращаемое значение System.getenv("OLDDIR") в подпроцессе?

обновлено: Извините, я должен использовать Java 1.4, и похоже, что System.getenv() был введен в версии 1.5?

Ответы [ 3 ]

32 голосов
/ 15 сентября 2011
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
    System.out.format("%s=%s%n", envName, env.get(envName));
}
22 голосов
/ 15 сентября 2011

System.getenv() вернет Map<String,String> со всеми переменными среды.

Но вы также можете легко переключиться на ProcessBuilder, чтоболее удобный API для запуска новых процессов.

С ProcessBuilder вы можете просто позвонить environment() и получить Map, что содержит существующие переменные среды икоторым вы можете манипулировать так, как хотите: то есть, если вы добавите к нему что-то, то это будет добавлено к переменным среды новых процессов.Если вы удалите что-то из этого, оно будет не присутствовать в новом процессе.

1 голос
/ 15 сентября 2011

Если вы запускаете внешнюю оболочку, вы можете использовать ее для установки переменных окружения.например,

bash -c ENV1=hi ENV2=bye echo $ENV1 $ENV2

Это работает, только если у вас есть оболочка UNIX (или cygwin)

Вы должны мигрировать с Java 1.4 и Java 5.0.Даже в Java 6 вы можете рассмотреть возможность обновления до Java 7.

...