Мне нужен метод 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:
Вывод на сканирование: