Майкл С. Даконта опубликовал фантастическое сообщение о успешных вызовах командной строки с использованием Runtime в Java. Это не так просто, как вы могли подумать!
Следующий фрагмент кода из этого сообщения в блоге описывает «MediocreExecJava», класс, который успешно запускает программу с использованием Runtime.exec () и управляет ее вводом и выводом без зависания , Я использовал его раньше, и он работает. Я настоятельно рекомендую прочитать сообщение, чтобы понять, почему!
import java.util.*;
import java.io.*;
public class MediocreExecJavac
{
public static void main(String args[])
{
try
{
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("javac");
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
System.out.println("<ERROR>");
while ( (line = br.readLine()) != null)
System.out.println(line);
System.out.println("</ERROR>");
int exitVal = proc.waitFor();
System.out.println("Process exitValue: " + exitVal);
} catch (Throwable t)
{
t.printStackTrace();
}
}
}
Правильный способ перенаправления ввода / вывода при запуске процесса в Java - писать / читать из потоков процесса:
Process p = Runtime.getRuntime().exec("sixV1.1");
InputStream is = p.getInputStream();
// read from is and write to outputFile.txt
OutputStream os = p.getOutputStream();
// read from inputFile.txt and write to os