С линии
InputStream in = proc.getInputStream();
InputStream err = proc.getErrorStream();
Вы уже в пути.
Эти потоки предоставляют вам доступ к стандартным выводам и стандартным потокам ошибок другого приложения (соответственно). Кстати: вы извлекаете стандартный выходной поток другого приложения, вызывая getInputStream(), так как это представление вашего текущего приложения; вы находитесь , вводя данные другого приложения.
Просто чтобы уточнить: стандартный выход и стандартный поток ошибок доступны в приложении путем печати вызовов на System.out
и System.err
(соответственно).
Итак, если у вас есть - например, System.out.println("Hello world")
в другом приложении, вы получите соответствующие байты (см. Ниже) во входном потоке, который вы ссылаетесь на переменную in
приведенного выше фрагмента кода.
Как правило, вас не интересуют байты, но вы хотите получить строку, которую вы поместили в вывод. Поэтому вы должны преобразовать байты в строку. Для этого вы обычно должны предоставить кодировку (класс Java для этого - Charset
). Фактически, в таких случаях работает стандартная кодировка платформы.
Самый простой способ, чтобы обернуть входной поток в буферном читателя: используется
BufferedReader outReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
кодирования Вышеуказанная mntioned платформы по умолчанию, если не указать любой набор символов в конструкторе InputStreamReader
«s.
BufferedReader знает метод readLine(), который вы должны использовать для получения всего вывода другого приложения.
while(outReader.ready())
System.out.println(outReader.readLine())
Одно слово о промывке: Если вы записываете данные в стандартный выходной поток, этот поток очищается только, когда символ новой строки также записывается. Это делается по звонкам до System.out.println(...)
. И именно по этой причине вы должны читать целые строки от читателя.
Теперь вы можете собрать код, который считывает вывод другого приложения? Если нет, возможно, вам стоит задать еще один вопрос.
Вы пробовали читать из потоков? – Reimeus
Вы можете преобразовать объект входного потока в строку. http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string –
@Reimeus: я просто sysout переменную, но не повезло .. – logan