前言: 在使用Java调用CMD命令的时候,有需求是连续输入多条CMD命令,网上查都是使用&
拼接命令,但是在一次执行后,如果后续还要在上面的CMD进程中执行命令怎么解决?可以使用Process的getOutputStream()
用流的形式写入命令
public static void main(String[] args){
ProcessBuilder pb = null;
// 创建进程实例,用来启动cmd
pb = new ProcessBuilder("cmd.exe");
// 设置文件的工作目录,根据自己的需求设置
pb.directory(new File("C://Users//86182"));
// 启动进程,一个start会开启一个进程
Process p = pb.start();
// 创建字符缓冲输出流,getOutputStream是得到进程的写入流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
// 第一条CMD命令,cd到桌面,最关键得是\n一定要写,注意不要写成/n,不然命令不会被执行,会打印出More?
bw.write("cd C:/Users/86182//Desktop \n");
// 第二条命令,创建文件夹。举一反一,有多少条命令,这样写入刷新关闭就可以,不需要用&拼接。
// 后续可以拿到这个流继续向这个进程写入命令
bw.write("md Myfile \n");
// 刷新流,写入后一定要刷新
bw.flush();
// 关闭流,注意一定要关闭,不然会阻塞
bw.close();
// 下面是获取输出并打印
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "GBK");
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}