我在java中使用以下代码在命令提示符中调用date命令:
// 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()
答案 0 :(得分:2)
您没有读取输出流,而是写入它以将数据传递给进程。从流程使用中读取数据
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
br.readLine();
代码用于进程的字符串输出。当然,如果您的进程以其他方式输出数据,则必须更改process.getInputStream()
更新:我认为我们使用getInputStream
来实际读取流程输出,这在某种程度上令人困惑:)原因是最初的基本类OutputStream
和{{相对于使用它们的代码(你编写的代码),命名是如此。因此,当您使用InputStream
时,您实际上将其用作您的计划的输出。当您使用OutputStream
时,您无法获得流程'输出但是获取您的程序输出,该输出通过管道传输来处理输入。当您使用process.getOutputStream
时,您会获得程序的输入,该程序将获取从流程管道传输的数据。输出
答案 1 :(得分:0)
你可以这样做而不使用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);