java 调用 powershell 遇到的 reader.readLine() 卡住问题

本文详细介绍了在Java中执行Powershell脚本时遇到的输出中断问题,并通过添加关键代码解决了该问题,确保了脚本输出的完整性和连续性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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--


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值