2014-02-06 31 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似乎并未完全加载? –