我正在用 java 编写一个程序,它将执行 winrar 并将我放在 h:\myjar.jar
中的 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
谁能告诉我为什么我会遇到这样的问题。我需要在代码中加入什么更改才能使其正常工作?
原文由 Trijit 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设
winrar.exe
Runtime.exec
PATH
找到它,如果它不是,则需要提供完全合格的路径,例如,假设winrar.exe
安装在C:/Program Files/WinRAR
你需要使用类似…就个人而言,我建议您使用
ProcessBuilder
因为它具有一些额外的配置功能。在可能的情况下,您还应该将命令和参数分成单独的String
元素,它处理空格之类的东西比单个String
变量要好得多,例如……不要忘记从进程中读取
InputStream
的内容,因为不这样做可能会使进程停止