2014-02-06 4 views
0

Я пытаюсь распаковать 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(); 
    } 
+0

захвата путем замены pr.getInputStream() с pr.getErrorStream(), и он скажет вам, если есть что-то неправильно с выполнением команды , – Sanjeev

+3

Мне нравится ответ от Павла. Теперь вам также нужно подумать о производительности. Если ваш код будет работать на WebServer или, по крайней мере, с большим количеством вызовов, гораздо лучше использовать некоторую java-библиотеку, вызывая внешние программы с помощью Runtime.exec() ', может убить ApplicationServer, если он является частью широко используемой функции. .. – Martin

ответ

1

Вы можете попробовать что-то вроде ниже

Process p = Runtime.getRuntime().exec(new String[]{"c:\\some_path\\UnRAR.exe", "e","c:\\some_another_path\\Archive.rar"}); 

или вы можете использовать ниже библиотеки

https://github.com/edmund-wagner/junrar 
1

вы не можете сразу запустите rar.exe на cmd. Он даст
«rar.exe» не распознается как внутренняя или внешняя команда, оперативная программа или командный файл.

Вы либо указать путь или добавить путь Рар в переменной окружения errorstream

+0

Я сделал то, что Санджив указал в комментариях, и я получаю «не признанный как внутренняя команда». Это странно, потому что rar.exe добавлен в мой PATH. Таким образом, кажется, что PATH не полностью загружен при использовании класса Process для выполнения rar.exe? –

Смежные вопросы