2014-02-06 64 views
0

我試圖從我的Java應用程序中解壓rar文件。無法通過進程運行rar.exe

我發現了很多關於如何執行命令的解決方案,這些命令適用於Windows上的dir等。但它似乎不適用於任何其他應用程序,如gccrar。我知道他們都工作,因爲當我執行他們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

捕獲errorstream的RAR的路徑),它會告訴你,如果有什麼不對的執行命令。 – Sanjeev

+3

我喜歡A保羅的答案。現在你還必須考慮性能。如果你的代碼將在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

你不能馬上就可以使用下面庫在cmd上運行rar.exe。它會給
'rar.exe'不被識別爲內部或外部命令,可操作的程序或批處理文件。

你要麼指定的路徑,或者通過更換pr.getInputStream()與pr.getErrorStream(添加在環境變量

+0

我做了Sanjeev在評論中指出的內容,我得到了「不承認爲內部命令」。這很奇怪,因爲rar.exe被添加到我的PATH中。因此,當使用Process類執行rar.exe時,PATH似乎並未完全加載? –