CreateProcess错误= 2,系统找不到指定的文件

我正在用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,则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从流程中读取内容,否则可能会导致流程停顿

以上是 CreateProcess错误= 2,系统找不到指定的文件 的全部内容, 来源链接: utcz.com/qa/426249.html

回到顶部