Я пытаюсь распаковать rar-файл из своего Java-приложения.Не удается запустить rar.exe через Process
Я нашел множество решений о том, как выполнить команду, которая работает для таких вещей, как dir
и т. Д. В Windows. Но, похоже, это не работает для других приложений, таких как gcc
или rar
. Я знаю, что они работают, потому что, когда я их исполняю в cmd
, они дают мне правильный результат.
Однако, я бы хотел напечатать вывод, который они выплюнули в cmd
. Я просто не понимаю, почему он работает для dir
и ни для чего другого (никаких «родных» команд).
exitVal
всегда, кажется, 0 ..
try {
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("cmd /c rar.exe"); //Does not work
//Process pr = rt.exec("cmd /c dir") // This works
//Process pr = rt.exec("gcc.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
String line=null;
while((line=input.readLine()) != null) {
System.out.println(line);
}
int exitVal = pr.waitFor();
System.out.println("Exited with error code "+exitVal);
}catch(IOException e)
{
System.out.println("An error occured. Are you sure the executable is in your Windows PATH?");
}
catch(Exception e) {
System.out.println(e.me);
e.printStackTrace();
}
catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
захвата путем замены pr.getInputStream() с pr.getErrorStream(), и он скажет вам, если есть что-то неправильно с выполнением команды , – Sanjeev
Мне нравится ответ от Павла. Теперь вам также нужно подумать о производительности. Если ваш код будет работать на WebServer или, по крайней мере, с большим количеством вызовов, гораздо лучше использовать некоторую java-библиотеку, вызывая внешние программы с помощью Runtime.exec() ', может убить ApplicationServer, если он является частью широко используемой функции. .. – Martin