2015-11-24 7 views
0

У меня есть быстрый вопрос о получении выходных данных из конкретных экземпляров программ, которые моя java-программа запускает через командную строку. Я могу получить выходные данные для программ, пока они выводят несколько строк, но если это программа, которая обновляет текущую строку, мне кажется, что вам не повезло. Например, когда я пытаюсь преобразовать mp4 в mp3, используя ffmpeg, у него будет только одна строка с текущими размерами файлов и временем, которые будут выполняться, которые я не могу получить при запуске через мою java-программу. Вот код, который я использую, когда работает несколько строк:Java, получающий выход из программы, выполняемой в командной строке, когда он постоянно обновляет одну строку в командной строке

InputStream is = pr.getInputStream(); 
    InputStreamReader isr = new InputStreamReader(is); 
    BufferedReader br = new BufferedReader(isr); 
    String line; 
    System.out.printf("Output of running %s is:\n", 
      Arrays.toString(command1)); 
    while ((line = br.readLine()) != null) { 
     System.out.println(line); 
    } 

    try { 
     int exitValue = pr.waitFor(); 
     System.out.println("\n\nExit Value is " + exitValue); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

Любая помощь будет очень признательна! Благодаря!

ответ

0

Я думаю, что вижу, что происходит. readLine() ищет символ '\ n'. Однолинейные программы выдают '\ r', чтобы вернуться к началу строки и повторно записать ее снова и снова.

Я читал около commons-io и javadocs, и ни один из них не имеет readLine (char c), который будет читаться до тех пор, пока не встретится какой-либо конкретный символ, так что, к сожалению, я думаю, что вам нужно закодировать это для себя. : \

+0

Ok спасибо, я буду смотреть на это! – Ibrennan208

0

Если вы используете br.readLine(), вам нужно быть уверенным, что оно завершено.

От Javadoc https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()

Считывает строку текста. Линия считается завершенной любым из строк ('\ n'), возвратом каретки ('\ r') или возвратом каретки , после чего сразу же возвращается строка.

Использование чтения() только и печать символов один на один может быть проще

+0

Спасибо! Я смотрю в нее. – Ibrennan208