1.执行命令并输出结果(如果存在执行结果)
Java的Runtime.getRuntime().exec(commandStr)可以调用执行cmd指令。
package cmd;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Command {
public static void main(String[] args) {
String line = null;
StringBuilder sb = new StringBuilder();
Runtime runtime = Runtime.getRuntime();
Process process;
try {
//执行多条命令 用 && 连接
process = runtime.exec("cmd /k git clone https://github.com/peizhouyu/Mall-SOA.git && cd Mall-SOA && mkdir peizhouyu");
BufferedReader bufferedReader = new BufferedReader
(new InputStreamReader(process.getInputStream()));
while ((line = bufferedReader.readLine()) != null) {
sb.append(line + "\n");
System.out.println(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
补充一个问题:在执行的命令可能有比较多的标准输出内容时,进程可能会阻塞不继续往下执行。(我在Windows环境中遇到,Linux未测试是否存在)。
解决方案:执行一个有标准输出的DOS可执行程序在windows 平台上,运行被调用程序的DOS窗口在程序执行完毕后往往并不会自动关闭,从而导致Java应用程序阻塞在waitfor( )。导致该现象的一个可能的原因是,该可执行程序的标准输出比较多,而运行窗口的标准输出缓冲区不够大。解决的办法是,利用Java提供的Process 类提供的方法让Java虚拟机截获被调用程序的DOS运行窗口的标准输出,在waitfor()命令之前读出窗口的标准输出缓冲区中的内容。
String str;
Process process =Runtime.getRuntime().exec("cmd /c dir windows");
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(process.getInputStream()));
while ( (str=bufferedReader.readLine()) !=null){
System.out.println(str);
}
process.waitfor();