在Java程序中使用ProcessBuilder,Process和BufferedReaders遇到一些问题。对于某些输入,该函数可以完美运行,但与其他输入相比,BufferedReader不会读取任何内容并返回空字符串。我不确定是什么原因导致了此错误。
我尝试调试,对于那些什么都没读的情况,BufferedReader完全跳过了循环。例如,当我以“ ipconfig”的形式传递命令时,该命令具有> 50行的CMD输出,它返回的每一行都与显示的完全相同。但是当我以'java -version'的形式传递命令时,它会完全跳过输出(应读取3行)。
ProcessBuilder /阅读功能:
public static String runCommandToStdOut(String command) throws InterruptedException, IOException {
StringBuilder sBuilder = new StringBuilder();
pBuilder = new ProcessBuilder();
String[] processArray = command.split(" ");
pBuilder.command(processArray);
process = pBuilder.start();
process.waitFor();
BufferedReader bReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
//reading cmd output to string
String line = "";
while ((line = bReader.readLine()) != null) {
sBuilder.append(line);
sBuilder.append(System.getProperty("line.separator"));
}
return sBuilder.toString();
}
我如何调用该函数:
try {
String stdOut = osCommandService.runCommandToStdOut("java -version");
}
第二个代码节中的stdOut字符串为空。这意味着该函数运行后,“ sBuilder.toString”行为空字符串。当我直接在cmd提示符下运行“ java -version”时,看到的输出长3行,显然是无法正确读取。