运行以下简单程序:
ProcessBuilder pb = new ProcessBuilder("powershell.exe", "-Command", "dir");
Process p = pb.start();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while((line = bufferedReader.readLine()) != null){
System.out.println(line);
}
System.out.println("Exit");
永远不会到达“退出”println - 只是无限地卡在 readLine()
方法上。我知道这是(很可能)由于 powershell 在最后一行没有输出 \n
且 readLine
不确定是否已到达末尾而引起的。有没有办法解决这个问题并正确读取输入流?顺便提一句。 processbuilder 上的 inheritIO
方法导致了同样的问题...
更新
这个:
ProcessBuilder pb = new ProcessBuilder("powershell.exe", "-Command", "dir");
pb.redirectErrorStream(true);
Process p = pb.start();
// BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream()));
// String line;
// while((line = bufferedReader.readLine()) != null){
// System.out.println(line);
// }
p.waitFor();
System.out.println("Exit");
也无限挂起...
最佳答案
Powershell 并未结束。我可能会使用 Java 列出目录,但这应该适用于您的示例。
ProcessBuilder pb = new ProcessBuilder("dir");
关于java - ProcessBuilder - 卡在 readLine() 方法上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20498861/