JAVA中使用Process p = Runtime.getRuntime().exec("命令内容"),可以执行所在主机的命令,执行结果通过Process对象的两个Stream返回,一个是getInputStream(),一个是getErrorStream()。直接获得这两个输入流,并判断流的内容,很难控制先后关系,并且无法准确判断命令是否执行成功。一个比较好的解决方法是ProcessBuilder把两个输入流合并,这样只需要获取一个执行结果就可以了,示例代码如下:
List<String> commandAndParameters = Arrays.asList(new String[] {"cmd.exe", "/C", "ping", "192.168.7.164"});
File dir = new File("D:\\");
ProcessBuilder builder = new ProcessBuilder();
builder.redirectErrorStream(true); // This is the important part
builder.command(commandAndParameters);
builder.directory(dir);
Process process = builder.start();
InputStream is = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is, "GBK"));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();