Tiger系列一:從XML中加載屬性
Tiger系列二:Tiger語言新特性
Tiger系列三:Annotation第一部分:使用內(nèi)置的Annotation
Tiger系列四:Annotation第二部分:定制Annotation
Tiger系列五:訪問環(huán)境變量和調(diào)用子進(jìn)程
System.getenv()方法可以方便的訪問平臺(tái)的環(huán)境變量,但從一開始就遭到反對(duì)而被拋棄,因?yàn)樵摲椒ㄟ`背了“編寫一次,隨處運(yùn)行”的原則。在Tiger版本中,又可以使用該方法了。
訪問平臺(tái)專有信息并不是一件容易的事。雖然可以使用
Runtime.exec()
創(chuàng)建進(jìn)程,但由于平臺(tái)之間的差異,構(gòu)造參數(shù)集常常令人頭痛不已。
Tiger
提供了新的
ProcessBuilder
類,使得訪問平臺(tái)專有信息更加容易。
?
1
、
訪問環(huán)境變量
System.getenv()
有兩種方法:
(
1
)指定環(huán)境變量名來獲得環(huán)境變量值,如下面的例子:
??????? public?static?void main(String[]?args)?{
???????????System.out.println(System.getenv( " JAVA_HOME " ));
???????}
}
輸出的結(jié)果可能是:

???????public?static?void?main(String[]?args)?{
??????????????for?(Entry?entry?:?System.getenv().entrySet())?{
????????????????System.out.println(entry.getKey()?+?"="?+?entry.getValue());
??????????????}
???????}
}
2
、
ProcessBuilder
l????????
早期
Java
版本允許使用
Runtime
.
exec()
方法創(chuàng)建本機(jī)進(jìn)程,該方法仍然有效,但是因?yàn)槭褂?/span>
String
數(shù)組作為參數(shù)、以
File
參數(shù)作為工作目錄,所以定制子進(jìn)程比較困難
l????????
使用
新的
ProcessBuilder
類
可以簡(jiǎn)化這個(gè)過程
l????????
下面是一個(gè)啟動(dòng)
EditPlus
的簡(jiǎn)單的例子:
??????? public?static?voidmain(String[]?args)?throws IOException?{
??????????Process?p =?newProcessBuilder(“C:\\ProgramFiles\\EditPlus2 \\editplus.exe”).start();
???????}
}
???????public?static?void?main(String[]?args)?throws?IOException?{
??????????????Process?p?=?new?ProcessBuilder("ping",?"sina.com.cn").start();
??????????????InputStream?is?=?p.getInputStream();
??????????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(is));
??????????????String?line;
??????????????while?((line?=?br.readLine())?!=?null)?{
????????????????System.out.println(line);
??????????????}
???????}
}
directory()
方法改變進(jìn)程的工作目錄,
使用
environment()
方法在進(jìn)程空間中添加和刪除環(huán)境變量
,下面是來自
JDK5
的例子:
?Map<String,?String>?env?=?pb.environment();
?env.put("VAR1",?"myValue");
?env.remove("OTHERVAR");
?env.put("VAR2",?env.get("VAR1")?+?"suffix");
?pb.directory("myDir");
?Process?p?=?pb.start();