gpt4 book ai didi

java - CreateProcess error=2,系统找不到指定的文件

转载 作者:行者123 更新时间:2023-12-02 00:33:36 53 4
gpt4 key购买 nike

我正在用 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.exePATH 中,则 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的内容,否则可能会导致进程停止

关于java - CreateProcess error=2,系统找不到指定的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993772/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com