代碼如下:
?1?????public?static?Map?getEnv()?{
?2?????????Map?map?=?new?HashMap();
?3?????????String?OS?=?System.getProperty("os.name").toLowerCase();
?4?????????
?5?????????Process?p?=?null;
?6?????????
?7 ?? ?? ? /**
?8? ??? ??? *?以windows為例.
?9? ??? ??? */
10?????????if(OS.indexOf("windows")?>?-1)?{
11?????????????try?{
12?????????????????p?=?Runtime.getRuntime().exec("cmd?/c?set");
13?????????????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(p.getInputStream()));
14?????????????????
15?????????????????String?line;
16?????????????????
17?????????????????while((line?=?br.readLine())?!=?null)?{
18?????????????????????String[]?str?=?line.split("=");
19?????????????????????map.put(str[0],?str[1]);
20?????????????????}
21?????????????}?catch(IOException?ioe)?{
22?????????????????ioe.printStackTrace();
23?????????????}
24?????????}
25?????????return?map;
26?????}
上述代碼將windows系統中的環境變量轉換為java的Map,只要通過map.get(key)就能得到環境變量值,比如map.get("JAVA_HOME"),得到JAVA_HOME的值,即JAVA_HOME的系統路徑。
值得注意的是在java中使用windows操作系統命令時要在命令前加
cmd /c,否則java會報錯(),錯誤列表如下:
?1?java.io.IOException:?CreateProcess: ${執行的操作命令表達式或者.bat文件} error=2
?2?at?java.lang.Win32Process.create(Native?Method)
?3?at?java.lang.Win32Process.<init>(Win32Process.java:63)
?4?at?java.lang.Runtime.execInternal(Native?Method)
?5?at?java.lang.Runtime.exec(Runtime.java:566)
?6?at?java.lang.Runtime.exec(Runtime.java:428)
?7?at?java.lang.Runtime.exec(Runtime.java:364)
?8?at?java.lang.Runtime.exec(Runtime.java:326)
?9?at?org.apache.jsp.ChangeDirBajaRCXX_jsp._jspService(ChangeDirBaja
10?p.java:185)
該錯誤的解釋:
The?error?2?comes?from?the?CreateProcess()?call,?from?MSDN?(GetLastError():
2?-?The?system?cannot?find?the?file?specified.?-?ERROR_FILE_NOT_FOUND
So,?it?means?the?path?you?passed?cannot?be?found.?Maybe?you?did?not?configure?your?Runtime?class?correctly.
put?the?batch?file?in?the?same?directory?as?the?class?file?and?use?(for?a?test):
posted on 2006-07-03 17:11
想飛的魚 閱讀(5876)
評論(2) 編輯 收藏 所屬分類:
java