1

我试图从 Java 代码运行命令行。

public void executeVcluto() throws IOException, InterruptedException {
    String command = "cmd /c C:\\Users\\User\\Downloads\\program.exe C:\\Users\\User\\Downloads\\file.txt 5 >> C:\\Users\\User\\Downloads\\result.txt";
    Process process = Runtime.getRuntime().exec(command);
    process.waitFor();
    if (process.exitValue() == 0) {
        System.out.println("Command exit successfully");
    } else {
        System.out.println("Command failed");
    }

}

但是,不会创建应写入输出结果的文件 result.txt。当我在 Windows 上从 cmd 执行此命令时,会创建文件并将结果写入其中。我收到命令退出成功消息。有人可以帮助我吗?

4

2 回答 2

3

输出重定向是shell特性,java进程不理解。

其他一些替代方法是 1. 使用上述行创建单个批处理文件并使用 ProcessBuilder/Runtime 调用它 2. 使用 ProcessBuilder 并使用输出流重定向输出。示例(它适用于 shell,也适用于批处理文件)在这里

ProcessBuilder builder = new     ProcessBuilder("cmd", "/c", "C:\\Users\\User\\Downloads\\program.exe", "C:\\Users\\User\\Downloads\\file.txt" , "5");
builder.redirectOutput(new File("C:\\Users\\User\\Downloads\\result.txt"));
builder.redirectError(new File("C:\\Users\\User\\Downloads\\resulterr.txt"));

Process p = builder.start(); // throws IOException

(上面是从运行时的 exec() 方法调整的,没有重定向输出

于 2013-07-07T01:42:14.220 回答
0

如有必要,请尝试cmd.exe,包括路径。

您正在创建一个全新的进程,这与向 shell 发出命令不同。

于 2013-07-07T01:16:49.540 回答