Чтение содержания outpustream - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть следующий код в Java, который вызывает команду даты в командной строке:

// prepare command prompt runtime and process
Runtime runtime = null;
Process process = null;

// prepare output stream
OutputStream outputStream = null;

try {
   runtime = Runtime.getRuntime(); // instantiate runtime object
   process = runtime.exec("date"); // get the current date in command prompt

   // read the output of executing date command
   outputStream = process.getOutputStream();

   // output the date response
   System.out.println(outputStream);

   process.waitFor(); // wait for the date command to finish
} catch(Exception e) {
  e.printStackTrace();
} // end catch

Как мне прочитать значение outputStream, чтобы я мог использовать System.output.println ()

Ответы [ 2 ]

2 голосов
/ 25 ноября 2011

Вы не читаете выходной поток, вы пишете в него, чтобы передать данные для обработки.Для чтения данных из процесса используйте

BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
br.readLine();

Код для вывода строки процесса.Конечно, если ваш процесс выводит данные другим способом, вы должны изменить обертки вокруг process.getInputStream()

Обновление: я думаю, что в некотором роде сбивает с толку, что мы используем getInputStream для фактического чтения вывода процесса :) Причина в том, что изначально базовые классы OutputStream и InputStream были названы так относительно кода, который их использует (код, который вы пишете).Поэтому, когда вы используете OutputStream, вы фактически используете его как вывод для вашей программы.Когда вы используете process.getOutputStream, вы не получаете выходные данные процесса, а вместо этого получаете выходные данные вашей программы, которые передаются для обработки входных данных.Когда вы используете process.getInputStream, вы получаете входные данные для вашей программы, которые получают данные, передаваемые из выходных данных процесса.

0 голосов
/ 25 ноября 2011

вы можете сделать так, не используя объект OutputStream

Process p = Runtime.getRuntime().exec("date");  
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));  
StringBuffer sb = new StringBuffer();  
String line;  
while ((line = br.readLine()) != null) {  
  sb.append(line).append("\n");  
}  
String answer = sb.toString(); 
System.out.println(answer);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...