Я пытаюсь написать программу на Java для запуска pdfgrep в командной строке в заданном файле, но у меня возникают проблемы с ее выполнением.Передача файла в качестве аргумента командной строки в Java
Я написал следующий код:
public class PDFGrepCall {
public static void main(String[] args) throws IOException, InterruptedException{
PDFGrepCall obj = new PDFGrepCall();
String searchterm = "git";
String filename = "~/Documents/COMP2100/03git.slides.pdf";
String newsearch = "'"+searchterm+"'";
String command="pdfgrep -c "+newsearch+" "+filename;
System.out.println(command);
StringBuffer output = new StringBuffer();
Process p;
p=Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = reader.readLine();
while ((line=reader.readLine())!=null) {
output.append(line+"\n");
}
System.out.println(output.toString());
}
Это должно напечатать команду, которую я написал, и на новой строке выведите результаты команды (в этом случае число 57). Однако, когда я запускаю его, программа не дает мне результатов команды, просто печатает новую строку после команды и завершает работу.
Я могу подтвердить, что сама команда вне java работает нормально и что файл существует в указанном месте.
Я пропустил что-то о передаче аргументов файла в функции командной строки из Java? Что я должен делать, чтобы выполнить эту задачу правильно?
EDIT: Решено ниже. Это должно быть сделано правильно с помощью processbuilder и путем изменения каталога на дом, а не с помощью «~».
Проверьте 'поток ошибок Process'. –
@ g.grinovski вы можете получить ошибки от 'BufferedReader stdError = new BufferedReader (new InputStreamReader (proc.getErrorStream())); '? – chengpohi
Добавил в него строку и код печати, я все равно получаю тот же результат. –