Получить вывод командной строки в строку в Java

Мне нужен java-метод, который будет читать вывод командной строки и сохранять его в String для чтения в Java.

Это то, что у меня есть, но работает неправильно.

public void testGetOutput() {
    System.out.println("\n\n****This is the testGetOutput Method!****");
    String s = null;
    String query = "dir " + this.desktop;
    try {
        Runtime runtime = Runtime.getRuntime();
        InputStream input = runtime.exec("cmd /c " + query).getInputStream();
        BufferedInputStream buffer = new BufferedInputStream(input);
        BufferedReader commandResult = new BufferedReader(new InputStreamReader(buffer));
        String line = "";
        try {
            while ((line = commandResult.readLine()) != null) {
                s += line + "\n";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(s);
    } catch (Exception e) {
        e.printStackTrace();
    }
}//end testGetOutput()

Думаю, проблема в том, что я пытаюсь изменить запрос на команду, которая будет выполнять HandBrakeCLI.exe. Глядя на мою систему, когда программа работает (но кажется, что она приостановлена), она показывает мне, что HandBrakeCLI.exe работает под окном cmd, которое запускается под моей IDE. Все это имеет смысл, но HandBrakeCLI.exe не выходит, поэтому я предполагаю, что поэтому я не могу прочитать вывод в качестве ввода для моей программы.

Итак, после этого фона. У меня большой вопрос: как мне закрыть HandBrakeCLI.exe после того, как он завершил мой запрос, чтобы я мог получить его результат? Просто для дополнительной информации, единственная разница между описанным выше методом и методом сканирования DVD У меня для HandBrakeCLI это переменная запроса другая. Как в этом примере:

String query = "C:\Users\Kent\Desktop\HBCLI\HandBrakeCLI -t --scan -i "C:\Users\Kent\Desktop\General Conference DVDs\Sources\174th October 2004\DVD 1"; //this is actually a variable in the DVD object, but here's an example'

Да, кстати, когда я запускаю этот запрос в обычной командной строке, он делает именно то, что я хочу, давая мне все результаты, которые я отчаянно желаю!

Вот исходная проблема (я не знаю, как повторно задать вопрос):

Я везде искал и не могу понять. Я не уверен, что то, что я обнаружил, имеет отношение к тому, чем я хочу заниматься. У меня пока нет большого количества кода для этого, поэтому здесь не так уж много кода, и я думаю, что это должно быть довольно просто, поэтому я собираюсь дать здесь несколько скриншотов. Итак, вот моя задача:

  1. Сканировать папку, полную скопированных папок DVD (папки Video_TS с файлами VOB и т. Д.), И сохранить эти имена папок в качестве заголовка DVD.

  2. Просканируйте каждую папку с помощью HandBrakeCLI и сохраните результат в виде строки.

  3. Регулярное выражение строки для идентификации каждого заголовка, главы и языка.

  4. Генерация запросов для передачи HandBrakeCLI для массового кодирования каждого языка в каждой главе в каждом заголовке для каждого DVD (вы можете понять, почему я хочу автоматизировать это!)

  5. Сохраните эти запросы в файле * .bat

Единственная часть, в которой я не уверен, - это шаг 2! Все остальное я могу делать довольно легко.Я много читал о OutputStreams, но просто не могу понять, как это работает. Мне действительно просто нужно получить вывод в строку, которую я могу использовать с помощью регулярного выражения, чтобы получить то, что мне нужно. Вот скриншоты того, что мне нужно ввести и что мне нужно удалить из вывода:

Вход в HandBrakeCLI:

enter image description here

Вывод для сканирования:

enter image description here

8
задан Eric Leschinski 2 November 2013 в 21:00
поделиться