Мне нужен метод Java, который будет читать выходные данные командной строки и сохранять их в строку для чтения в 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'
Да, и, кстати, когда я запускаю этот запрос в обычной командной строке, он делает именно то, что мне нужно, и выдает мне весь вывод, который я отчаянно желаю!
Вот исходная проблема (я не знаю, как повторить вопрос):
Я искал везде и не могу понять это. Я не уверен, что то, что я нашел, имеет отношение к тому, что я хочу сделать. У меня пока нет большого количества кода для этого, поэтому не очень много места для размещения кода здесь, и я думаю, что это должно быть довольно просто, поэтому я собираюсь сделать несколько скриншотов здесь. Итак, вот моя задача:
Сканирование папки, которая заполнена скопированными папками DVD (папки Video_TS с файлами VOB и т. Д.), И сохраните имена этих папок в качестве названия DVD.
Сканирование каждой папки с помощью HandBrakeCLI и сохранение вывода в строку.
Пересмотрите строку, чтобы указать каждый заголовок, главу и язык.
Генерация запросов для возврата в HandBrakeCLI для массового кодирования каждого языка в каждой главе в каждом заголовке для каждого DVD (вы можете понять, почему я хочу автоматизировать это!)
Сохранить эти запросы в * .bat файле
Единственная часть, в которой я не уверен, это шаг 2! Я могу сделать все остальное довольно легко. Я много читал о OutputStreams, но я просто не могу понять, как он работает. Мне действительно просто нужно получить вывод в строку, которую я могу регулярное выражение, чтобы получить вещи, которые мне нужны Вот скриншоты того, что мне нужно ввести и что мне нужно убрать с вывода:
Вход для HandBrakeCLI:
Вывод на сканирование: