To execute system/external command we need to use Process class. There are 2 ways to get this instance:
- Using static method Runtime.getRuntime()
- Using ProcessBuilder
This is the example code to call ping or whois under Debian TestShell.java:
import java.util.Map;import java.io.InputStream;import java.io.InputStreamReader;import java.io.IOException;import java.io.BufferedReader;/*Ref:http://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.htmlhttp://www.javatips.net/blog/java-processbuilder-examplhttp://www.mkyong.com/java/how-to-execute-shell-command-from-java/*/class TestShell { public static void main(String[] args) { System.out.println("Creating ProcessBuilder Object"); //ProcessBuilder pb = new ProcessBuilder("whois", "garasiku.web.id"); ProcessBuilder pb = new ProcessBuilder("ping", "www.garasiku.web.id", "-c", "4"); Map<String, String> env = pb.environment(); System.out.println("size env: "+env.size()); //Java 8 only, forEach and Lambda env.forEach((k,v)->System.out.println("Key : " + k + " Value : " + v)); try { //Process p = Runtime.getRuntime().exec("ping www.garasiku.web.id -c 4"); Process p = pb.start(); System.out.println("dump standard output");
InputStreamReader isr = new InputStreamReader(p.getInputStream()); BufferedReader br = new BufferedReader(isr); String tmp=""; while ((tmp = br.readLine()) != null) { System.out.println(tmp); } System.out.println("dump standard error");
isr = new InputStreamReader(p.getInputStream());
br = new BufferedReader(isr);
tmp="";
while ((tmp = br.readLine()) != null) {
System.out.println(tmp);
}
// waitFor() method is used to wait till the process returns the exit value try { int exitValue = p.waitFor(); System.out.println("Exit Value is " + exitValue); } catch (InterruptedException e) { e.printStackTrace(); } } catch (IOException e) { System.out.println(e.toString()); } }}References:
- http://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html
- http://www.javatips.net/blog/java-processbuilder-example
- http://www.mkyong.com/java/how-to-execute-shell-command-from-java/