1、首先我本地有一个test.ps1的powershell文件,内容为(只是为了输出传进来的参数):
For($i=0;$i -lt $args.Count; $i++)
{
Write-Host "parameter $i : $($args[$i])"
}
2、然后我的java代码如下:
private static void testExeCmd() {
BufferedReader reader = null;
try {
String cmd = "powershell.exe -file D:/test.ps1 p1 p2";
Process p = Runtime.getRuntime().exec(cmd);
p.getOutputStream().close();
reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line= null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println("out put end--");
p.waitFor();
p.destroy();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
执行结果:
parameter 0 : p1
parameter 1 : p2
没有输出out put end ---,也就是说进程卡在 while里面了。后面所有内容都中断了。
针对这个问题,苦费心思,找了好久。
解决方案:
Process p = Runtime.getRuntime().exec(cmd);
p.getOutputStream().close();//加上这2句即可解决
p.getErrorStream().close();
完美输出:
parameter 0 : p1
parameter 1 : p2
out put end--