我正在尝试使用BufferedReader来读取进程的输出。当我尝试
Process p=Runtime.getRuntime().exec("nslookup 10.123.30.130");
p.waitFor();
BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=reader.readLine();
while(line!=null)
{
System.out.println(line);
line=reader.readLine();
}
输出
Server: <edited server details>
Address: <edited address details>
而控制台中进程的实际输出是:
Server: <details edited>
Address: <details edited>
Name: <details edited>
Address: <details edited>
(注意:出于安全原因,我已经编辑了实际输出)
我的观察是,在读取前两行后,返回null,因此流结束。有什么方法可以得到完整的四行吗?
更新:
第三个空行被解释为null。但是,如果我为Process p=Runtime.getRuntime().exec("cmd /c dir");
尝试相同的程序,即使有新的行,我也会得到与控制台完全相同的输出。
答案 0 :(得分:0)
也读取错误缓冲区。
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String errorLine;
while( (errorLine = stdError.readLine()) != null ){
System.out.println(errorLine);
}
您会发现存在错误, nslookup 无法解析您的IP地址域。使用主机名而不是IP地址。