Я думаю, что ключом здесь может быть то, что ProcessBuilder redirectError(File file)
на самом деле redirectError (Redirect.to(file))
.
Из документации Oracle класса ProcessBuilder:
Это удобный метод.Вызов формы redirectError (file) ведет себя точно так же, как и вызов redirectError (Redirect.to (file)).
В большинстве примеров, которые я видел, используется Redirect.appendTo(File file)
вместо Redirect.to(file)
.Документация может объяснить, почему.
Из документации Oracle по ProcessBuilder.Redirect:
public static ProcessBuilder.Redirect to(File file)
Возвращает перенаправление для записи в указанный файл.Если указанный файл существует при запуске подпроцесса, его предыдущее содержимое будет отброшено.
public static ProcessBuilder.Redirect appendTo(File file)
Возвращает перенаправление для добавления к указанному файлу.Каждая операция записи сначала продвигает позицию до конца файла, а затем записывает запрошенные данные.
Я бы попробовал заменить
pb.redirectError(errorsFile)
на
pb.redirectError(Redirect.appendTo(errorsFile))
и посмотреть, получится ли таким образом больше строк.