2011-09-15 131 views
9

System.getenv(name)需要環境變量的名稱。如何枚舉Java中的所有環境變量

我想調用Runtime.exec(String[], String[], File),輔助參數需要一個環境變量數組,我不知道如果我指定此參數,子進程是否會從當前進程繼承環境變量。

例如,如果我通過new String[]{"NEWDIR=/home"}作爲輔助參數,並且當前java進程具有環境OLDDIR=/var,子進程中的返回值System.getenv("OLDDIR")是什麼?

已更新: 對不起,我必須使用Java 1.4,看起來System.getenv()是在1.5中引入的?

+0

爲什麼你必須使用Java 1.4?較新版本的Java具有出色的向後兼容性 - 您是否嘗試過升級? – Bringer128

回答

11

System.getenv()將返回一個Map<String,String>與所有的環境變量。

但是,您可以輕鬆切換到ProcessBuilder這是一個更方便的API來啓動新進程。

隨着ProcessBuilder,你可以簡單地調用environment()並得到Map包含現有的環境變量,哪些是你可以操縱你怎麼想:即如果你添加的東西給它,然後將被添加到新處理環境變量。如果您從中刪除某些東西,則而不是將出現在新過程中。

+0

感謝您的快速回復,我該怎麼做JAVA14? – sevenever

+0

因爲你只是搞砸了,因爲'System.getenv()'和'ProcessBuilder'只在Java 5中引入,'Runtime.exec()'不允許合併未知的現有環境變量指定的。認真:擺脫古代版本。 –

17
Map<String, String> env = System.getenv(); 
for (String envName : env.keySet()) { 
    System.out.format("%s=%s%n", envName, env.get(envName)); 
} 
1

如果你運行一個外殼,你可以用它來設置環境變量。例如

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

這隻能如果您有一個UNIX shell(或Cygwin的)

你應該從Java 1.4和Java 5.0遷移出來。即使是Java 6,你也可以考慮升級到Java 7.