天天看點

Groovy學習(二):GDK初探

概念

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()肯定更加友善而已。