我正在用java编写一个程序,它将执行winrar并解压一个jar文件,放在h:\myjar.jar
进入文件夹h:\new
。我的java代码是这样的
import java.io.File;
import java.io.IOException;
public class MainClass {
public static void main(String[] args) {
Runtime r = Runtime.getRuntime();
Process p = null;
try {
File dir = new File("C:/Program Files/WinRAR");
p = r.exec("winrar x h:\\myjar.jar *.* h:\\new", null, dir);
} catch (IOException e) {
e.printStackTrace();
}
}
}
当我执行此操作时,我收到此错误
java.io.IOException: Cannot run program "winrar" (in directory "C:\Program Files\WinRAR"): CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at MainClass.main(MainClass.java:16)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 4 more
谁能告诉我为什么我会遇到这样的问题。我需要在代码中进行哪些更改才能使其正常工作?
假如说winrar.exe
在里面PATH
, then Runtime.exec
能够找到它,如果不能,您将需要提供它的完全限定路径,例如,假设winrar.exe
安装在C:/Program Files/WinRAR
你需要使用类似...
p=r.exec("C:/Program Files/WinRAR/winrar x h:\\myjar.jar *.* h:\\new");
就我个人而言,我建议您使用ProcessBuilder
因为它具有一些额外的配置能力等。如果可能的话,您还应该将命令和参数分开String
元素,它比单个元素更好地处理空间之类的事情String
变量,例如...
ProcessBuilder pb = new ProcessBuilder(
"C:/Program Files/WinRAR/winrar",
"x",
"myjar.jar",
"*.*",
"new");
pb.directory(new File("H:/"));
pb. redirectErrorStream(true);
Process p = pb.start();
不要忘记阅读本文的内容InputStream
从流程中,因为不这样做可能会导致流程停滞
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)