Post ini sebenarnya adalah bagian dari post mengenai proses eksternal di Java beberapa waktu lalu. Namun, kali ini saya menekankan script untuk menjalankan perintah/script/aplikasi (kedepannya saya sebut aplikasi saja) yang bersifat cepat dan sekali pakai untuk mengambil output dari aplikasi tersebut.
Saya sering menemukan kondisi dimana saya membutuhkan output dari perintah konsol Linux, misal wc -l namafile.txt
untuk mendapatkan jumlah baris di dalam 1 file. Memang terdengar aneh, kan Java bisa? Ngapain musti pake perintah Linux, di Windows error dong? Ya memang. Namun, saya memang lebih banyak membangun aplikasi yang dirancang hanya berjalan di 1 mesin dengan OS Linux, jadi saya lebih suka menggunakan tools bawaan Linux, jika tersedia, karena menurut saya jauh lebih cepat.
Oke lupakan, tutorial ini saya akan mengasumsikan penggunaan java di Windows.
Command apa yang bisa dijadikan contoh, bagaimana kalau kita mengambil ID dari processor yang digunakan di komputer tersebut?
Sebagai perbandingan, buka command prompt, dan jalankan perintah berikut wmic cpu get processorid
Tapi jangan lupa, inti dari tutorial ini bukan mengenai ID processor, tapi bagaimana mengeksekusi sebuah aplikasi dari Java dan mendapatkan output nya.
File Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | package id.web.konglie.cli; /** * * @author Konglie */ public class Main { public static void main(String[] args){ String rawResult = CmdExec.cmd("wmic cpu get processorid"); String[] x = rawResult.trim().split("\n"); String procID = x[x.length - 1]; out("id processor: " + procID); } public static void out(Object o){ System.out.println(o); } } |
File CmdExec.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package id.web.konglie.cli; import java.io.BufferedReader; import java.io.InputStreamReader; /** * * @author Konglie */ public class CmdExec { public static String cmd(String cmd) { try{ Runtime run = Runtime.getRuntime(); Process pr = run.exec(cmd); return getPRResult(pr); } catch(Exception e) { return null; } } public static String cmd(String[] cmd){ try{ Runtime run = Runtime.getRuntime(); Process pr = run.exec(cmd); return getPRResult(pr); } catch(Exception e) { return null; } } private static String getPRResult(Process pr){ String res = ""; try{ pr.waitFor(); BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream())); String line = ""; while ((line = buf.readLine()) != null ) res += line + "\n"; } catch(Exception e) {} return res.trim(); } } |