У меня проблемы с использованием ProcessBuilder, Process и BufferedReaders в моей Java-программе. Для некоторых входов функция работает отлично, но с другими 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 является пустой строкой после запуска функции. Вывод, который я вижу, когда я запускаю 'java -version' непосредственно в моей командной строке, имеет длину 3 строки, что, очевидно, не читается должным образом.