Java tutorial
/* * Copyright 2010 Pablo Arrighi, Alex Concha, Miguel Lezama for version 1. * Copyright 2013 Pablo Arrighi, Miguel Lezama, Kevin Mazet for version 2. * * This file is part of GOOL. * * GOOL is free software: you can redistribute it and/or modify it under the terms of the GNU * General Public License as published by the Free Software Foundation, version 3. * * GOOL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License version 3 for more details. * * You should have received a copy of the GNU General Public License along with GOOL, * in the file COPYING.txt. If not, see <http://www.gnu.org/licenses/>. */ package gool.executor; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; /** * Operating System command execution helper. */ public final class Command { private static Logger logger = Logger.getLogger(Command.class.getName()); private Command() { } /** * Executes a command in the specified working directory. * * @param workingDir * the working directory. * @param params * the command to execute and its parameters. * @return the console output. */ public static String exec(File workingDir, String... params) { return exec(workingDir, Arrays.asList(params)); } public static String exec(File workingDir, List<String> params) { return exec(workingDir, params, new HashMap<String, String>()); } /** * Executes a command in the specified working directory. * * @param workingDir * the working directory. * @param params * the command to execute and its parameters. * @return the console output. */ public static String exec(File workingDir, List<String> params, Map<String, String> env) { try { StringBuffer buffer = new StringBuffer(); ProcessBuilder pb = new ProcessBuilder(params); pb.directory(workingDir); for (Entry<String, String> e : env.entrySet()) { pb.environment().put(e.getKey(), e.getValue()); } Process p = pb.redirectErrorStream(true).start(); p.getOutputStream().close(); BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); String line; while ((line = in.readLine()) != null) { buffer.append(line).append("\n"); } int retval = p.waitFor(); if (retval != 0) { throw new CommandException( "The command execution returned " + retval + " as return value... !\n" + buffer); } return buffer.toString(); } catch (IOException e) { throw new CommandException(e); } catch (InterruptedException e) { throw new CommandException("It seems the process was killed", e); } } }