StreamGobbler.java import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.io.*; /** * Created by IntelliJ IDEA. * User: Administrator * Date: 2008-2-4 * Time: 11:18:50 * To change this template use File | Settings | File Templates. */ class StreamGobbler extends Thread { Log log = LogFactory.getLog(StreamGobbler.class); InputStream is; String type; OutputStream os; StreamGobbler(InputStream is, String type) { this(is, type, null); } StreamGobbler(InputStream is, String type, OutputStream redirect) { this.is = is; this.type = type; this.os = redirect; } public void run() { try { PrintWriter pw = null; if (os != null) pw = new PrintWriter(os); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) { if (pw != null) pw.println(line); log.debug(type + ">" + line); } if (pw != null) pw.flush(); } catch (IOException ioe) { log.debug(ioe.getMessage()); } } } import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.io.IOUtils; import java.io.*; import java.util.Arrays; import java.util.List; import java.util.ArrayList; public class ExecuteCommand { private static ExecuteCommand instance = null; public synchronized static ExecuteCommand getInstance() { if (instance == null) instance = new ExecuteCommand(); return instance; } Log log = LogFactory.getLog(ExecuteCommand.class); public boolean exeCommand(String cmd, String msg) { log.debug(cmd); String[] cmdAttribs = {"cmd", "/C", cmd}; List lines = new ArrayList(20); Process proc = null; InputStream in = null; OutputStream out = null; InputStream err = null; BufferedReader inr = null; try { proc = Runtime.getRuntime().exec(cmdAttribs); in = proc.getInputStream(); out = proc.getOutputStream(); err = proc.getErrorStream(); StreamGobbler errorGobbler = new StreamGobbler(err, "Error"); StreamGobbler outputGobbler = new StreamGobbler(in, "Output"); errorGobbler.start(); outputGobbler.start(); if (errorGobbler.is.read() != -1) { proc.destroy(); return false; } proc.waitFor(); if (proc.exitValue() != 0) { // os command problem, throw exception log.debug("Command line returned OS error code '" + proc.exitValue() + "' for command " + Arrays.asList(cmdAttribs)); return false; } } catch (IOException e) { log.debug("Command line threw an IOException '" + e.getMessage() + "' for command " + Arrays.asList(cmdAttribs)); return false; } catch (InterruptedException ex) { log.debug("Command line threw an InterruptedException '" + ex.getMessage() + "' for command " + Arrays.asList(cmdAttribs)); return false; } finally { IOUtils.closeQuietly(in); IOUtils.closeQuietly(out); IOUtils.closeQuietly(err); IOUtils.closeQuietly(inr); if (proc != null) { proc.destroy(); } } return true; } public String exeCommandStr(String cmd) { log.debug(cmd); String[] cmdAttribs = {"cmd", "/C", cmd}; Process proc = null; InputStream in = null; OutputStream out = null; InputStream err = null; BufferedReader inr = null; String re = ""; try { proc = Runtime.getRuntime().exec(cmdAttribs); in = proc.getInputStream(); out = proc.getOutputStream(); err = proc.getErrorStream(); StreamGobbler errorGobbler = new StreamGobbler(err, "Error"); StreamGobbler outputGobbler = new StreamGobbler(in, "Output"); errorGobbler.start(); outputGobbler.start(); if (errorGobbler.is.read() != -1) { proc.destroy(); } proc.waitFor(); String line = ""; BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(outputGobbler.is)); while ((line = bufferedReader.readLine()) != null) { re += line; } if (proc.exitValue() != 0) { // os command problem, throw exception log.debug("Command line returned OS error code '" + proc.exitValue() + "' for command " + Arrays.asList(cmdAttribs)); } } catch (IOException e) { log.debug("Command line threw an IOException '" + e.getMessage() + "' for command " + Arrays.asList(cmdAttribs)); } catch (InterruptedException ex) { log.debug("Command line threw an InterruptedException '" + ex.getMessage() + "' for command " + Arrays.asList(cmdAttribs)); } finally { IOUtils.closeQuietly(in); IOUtils.closeQuietly(out); IOUtils.closeQuietly(err); IOUtils.closeQuietly(inr); if (proc != null) { proc.destroy(); } } return re; } }