Если на поле окон быстрый и грязный slution является CVSNT. Простой в использовании просто настраивает его, и работает очень хорошо.
я сам предпочитаю SVN, но это - хорошее для быстрого использования.
Здесь используется класс, который считывает весь вывод, генерируемый исполняемой программой, и отображает его в собственном стандартном выводе.
class StreamGobbler extends Thread {
InputStream is;
// reads everything from is until empty.
StreamGobbler(InputStream is) {
this.is = is;
}
public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
System.out.println(line);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
//output both stdout and stderr data from proc to stdout of this process
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream());
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream());
errorGobbler.start();
outputGobbler.start();
proc.waitFor();
Вот что-нибудь попроще, если вы просто пытаетесь получить вывод простой команды. Вам нужно будет использовать потоки, такие как jitter, если вы хотите обрабатывать параллельно или если ваша команда принимает stdin или генерирует stderr.
Используйте буферизованную копию (например, this ), если вы получаете много вывода.
import java.io.*;
public class test {
static void copy(InputStream in, OutputStream out) throws IOException {
while (true) {
int c = in.read();
if (c == -1) break;
out.write((char)c);
}
}
public static void main(String[] args) throws IOException, InterruptedException {
String cmd = "echo foo";
Process p = Runtime.getRuntime().exec(cmd);
copy(p.getInputStream(), System.out);
p.waitFor();
}
}
The following Groovy code will execute foo.bat and send the output to stdout:
println "foo.bat".execute().text