Перенаправление Времени Выполнения.getRuntime().exec () вывод с системой.разбивка();
У меня есть тестовая программа.java:
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception {
System.setOut(new PrintStream(new FileOutputStream("test.txt")));
System.out.println("HelloWorld1");
Runtime.getRuntime().exec("echo HelloWorld2");
}
}
предполагается, что это напечатает HelloWorld1 и HelloWorld2 в текст файла.формат txt. Однако, когда я просматриваю файл, я вижу только HelloWorld1.
куда делся HelloWorld2? Она растворилась в воздухе?
допустим, я хочу перенаправить HelloWorld2 для тестирования.txt также. Я не могу просто добавить ">тест>.txt " в команде, потому что я получу файл уже открыт ошибка. Так как же мне быть? это?
3 ответов
стандартный вывод среды выполнения.exec не отправляется автоматически на стандартный вывод вызывающего объекта.
что - то вроде этого-получить доступ к стандартному выходу раздвоенного процесса, прочитать его, а затем записать. Обратите внимание, что вывод из раздвоенного процесса доступен для родителя с помощью getInputStream()
метод экземпляра процесса.
public static void main(String[] args) throws Exception {
System.setOut(new PrintStream(new FileOutputStream("test.txt")));
System.out.println("HelloWorld1");
try {
String line;
Process p = Runtime.getRuntime().exec( "echo HelloWorld2" );
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()) );
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
}
catch (Exception e) {
// ...
}
}
начиная с JDK 1.5 существует java.ленг.ProcessBuilder, который также обрабатывает потоки std и err. Это своего рода замена java.ленг.Runtime и вы должны использовать его.