概念
Groovy擴充了JDK,這些擴充稱之為GDK,下面的例子展示了GDK的能力。
在java中可以使用java.lang.Process與系統互動。假設我們要在代碼中檢視系統中Groovy的版本。
案例
java實作系統互動
class helloJava {
public static void main(String[] args) {
Process proc = Runtime.getRuntime().exec("groovy -v");
BufferedReader result = new BufferedReader(
new InputStreamReader(proc.getInputStream())
)
String line;
while ((line = result.readLine()) != null){
System.out.println(line);
}
}
}
運作結果:
Groovy Version: 2.5.7 JVM: 1.8.0_181 Vendor: Oracle Corporation OS: Mac OS X
我們可以發現,這段代碼的核心語句隻是“groovy -v”這一條指令,然而為了執行這一條指令用java代碼卻大費周章,這還不算代碼中的異常處理。而由于Groovy的動态能力,GDK為String類型擴充了excute()方法。GDK使和系統互動變得異常簡單。
Groovy實作系統互動
println "groovy -v".execute().text
運作結果:
Groovy Version: 2.5.7 JVM: 1.8.0_181 Vendor: Oracle Corporation OS: Mac OS X
擴充
上面說了java中可以使用java.lang.Process與系統交,可代碼卻使用的Runtime.getRuntime().exec()方法來擷取Process類。
檢視Runtime類的源代碼可以看到exec方法的實作:
public Process exec(String[] cmdarray, String[] envp, File dir)
throws IOException {
return new ProcessBuilder(cmdarray)
.environment(envp)
.directory(dir)
.start();
}
我們當然也可以手動寫上述代碼,不過利用Runtime.getRuntime().exec()肯定更加友善而已。