2010-08-22 2 views
3

Я (в Java),Почему я не могу использовать файлы войти Java Runtime

rt.exec("qq.exe -i ..(some other parameters) > qq.log");//*1 

когда я бегу QQ.exe -i .. (некоторые другие параметры)> qq.log в терминале Это прекрасно работает и сохраняет файл qq.log правильно.

Однако использование rt.exec (* 1) не работает. "> qq.log" вызывает проблему. Когда я удаляю эту часть, rt.exec (* 1) работает, но на этот раз у меня нет qq.log-файла.

В чем причина этой проблемы и есть ли какое-либо солн?

ответ

3

rt.exec() не может выполнить код sh/bat. Это просто вызов другой программы. Когда вы пытаетесь перенаправить выходной поток qq.exe с символом >, который специфичен для оболочки, java не понимает, что делать.

Альтернатива - это когда вы выполняете какую-либо программу с помощью метода exec, получите Process, возвращенный rt.exec(). A Process может предоставить вам OutputStream для приложения, InputStream из приложения и даже ErrorStream для запущенного приложения.

С помощью InputStream вы можете программно считывать результат qq.exe, и все, что вам нужно сделать, это записать это в файл.

+1

thnx много. Незначительная коррекция: это не OutputStream, это InputStream. Выходы программ входят в InputStream. OutputStream - это наши результаты, входящие в программу ... – ogzylz

0

Java 7 добавлен класс ProcesBuilder.Redirect, который позволяет перенаправлять потоки ввода/вывода/ошибок в/из файлов. Его можно использовать следующим образом:

ProcessBuilder builder = new ProcessBuilder("cat", "/proc/meminfo"); 
    // Append all errors from process to log file: 
    builder.redirectError(Redirect.appendTo(new File("/tmp/my.log"))); 
    Process process = builder.start(); 

Используя соответствующие методы, вы можете перенаправить ввод и вывод. Полный пример: Run external process in Java 7.

Смежные вопросы