Как я могу получить все ошибки при выполнении команды? - PullRequest
3 голосов
/ 02 мая 2019

Я разрабатываю Java-программу, в определенный момент в программе мне нужно выполнить некоторые команды и показать все ошибки, возвращенные этой командой.Но я могу показать только первый.

Это мой код:


String[] comando = {mql,"-c",cmd};

File errorsFile = new File("C:\\Users\\Administrator2\\Desktop\\errors.txt");

ProcessBuilder pb = new ProcessBuilder(comando);
pb.redirectError(errorsFile);

Process p = pb.start();
p.waitFor();

String r = errorsFile.getAbsolutePath();

Path ruta = Paths.get(r);
Charset charset = Charset.forName("ISO-8859-1");

List<String> fileContents = Files.readAllLines(ruta,charset);

if (fileContents.size()>0){
      int cont = 1;
      for(String str : fileContents){

              System.out.println("Error"+cont);
              System.out.println("\t"+str);
              cont++;
      }
}
else{
     //other code
}

В этом случае я знаю, что есть более одной ошибки, поэтому я ожидаю более одного вывода, нокак видно на фото я получаю только один.enter image description here

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

Я думаю, что ключом здесь может быть то, что 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))

и посмотреть, получится ли таким образом больше строк.

1 голос
/ 02 мая 2019

Вы отлаживали и проверяли содержимое fileContents?

РЕДАКТИРОВАТЬ: Извините, это должен быть комментарий, но пока не могу: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...