I had a requirement to do a Ping request to a server machine inside java and execute some batch scripts and get results. I found that native ping from java is bit difficult to implement and need some ground level work. Then I found the awesome ProcessBuilder class which can execute OS processes to achieve all my requirements in one implementation. Given below is a simple code for do a windows ping request using this class.
import java.util.ArrayList; import java.util.List; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.IOException; public class executeCmd { public static void main(String[] args) { try { List<String> commands = new ArrayList<String>(); //simulate >ping localhost -4 commands.add("ping"); commands.add("localhost"); commands.add("-4"); executeProcess(commands); } catch (Exception exc) { System.out.println("error"); } } static void executeProcess(List<String> commands){ ProcessBuilder builder = new ProcessBuilder(commands); builder.redirectErrorStream(true); Process p; try { p = builder.start(); BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedWriter w = new BufferedWriter(new OutputStreamWriter(p.getOutputStream())); String line; while (true) { line = r.readLine(); if (line == null) { break; } System.out.println(line); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Leave a Reply