【问题标题】:Execute cmd commands from inside a java program从 java 程序内部执行 cmd 命令
【发布时间】:2017-04-24 22:09:30
【问题描述】:

我正在尝试使用以下代码在 java 程序中执行 cmd 命令

            String command = "clingo F:\\clingo\\food1.lp F:\\clingo\\fooddata.txt"
                + " 0"+" >>F:\\clingo\\foodout.txt";
        Process p1 = Runtime.getRuntime().exec(command);

这是在java中执行,没有任何异常,但实际命令没有运行。如果命令运行,它应该在提到的位置创建文本文件 foodout.txt。什么都没有发生。

实际的命令是

clingo food1.lp fooddata.txt 0 >>foodout.txt

cligo 是一个 Windows 可执行程序。此命令在命令提示符下运行时工作正常。我想通过单击一个按钮在 java 程序中运行它。我已经为 cligo 设置了环境变量。 Clingo 和这个 java 项目在同一个目录中。

在此之前我尝试了下面的代码

        String[] command = {"clingo", "food1.lp","fooddata.txt", "0", ">>foodout.txt"};
        ProcessBuilder builder = new ProcessBuilder(command);
        builder.directory(new File(WorkingDirectoryArea.getText()));
        Process process = builder.start();

其中 Workingdirectoryarea 包含要运行的命令的目录位置。这段代码什么都不做。

有人可以指导我或提供有关如何在此 java 程序中运行 cmd 命令的代码示例。我正在使用 Netbeans IDE。谢谢。

【问题讨论】:

    标签: java windows cmd process runtime


    【解决方案1】:

    你说你的命令在命令提示符下工作。好的。如果仔细观察,命令窗口有一个路径条目(cmd= echo %PATH%)。这就是在命令窗口中执行命令和执行 java 进程之间的区别。您有 2 个选项。

    1. Add the path to the process.
    2. Add the path to the clingo command (i.e. "f:\path\clingo.exe ...)
    

    使用 dos 命令时尤其需要第 1 项。添加路径环境: Runtime.getRuntime().exec not finding file in java environment

    【讨论】:

    • 好的。 3. 我忘了“cmd /c 就像@whbogado 说的那样。
    【解决方案2】:

    您正在将标准输出重定向到文件。这不是命令的一部分,也不是命令行参数。是处理这个的命令解释器。

    你必须像这样调用命令解释器来运行你的程序:

    String command = "cmd /c clingo F:\\clingo\\food1.lp F:\\clingo\\fooddata.txt"
                + " 0"+" >>F:\\clingo\\foodout.txt";
    Process p1 = Runtime.getRuntime().exec(command);
    

    注意cmd /cpart,它调用命令解释器来运行你的命令,就像在 Windows 终端上一样。

    在 Linux 上,它将是 sh -c 或任何你喜欢的 shell。

    编辑 1

    运行命令时,clingo.exe 必须在您的路径中,或者它必须在 Java 解释器的默认目录中。如果没有,您应该提供可执行文件的完整路径,如下所示:

    String command = "cmd /c F:\\clingo\\clingo F:\\clingo\\food1.lp F:\\clingo\\fooddata.txt"
                + " 0"+" >>F:\\clingo\\foodout.txt";
    

    尝试运行

    F:\\clingo\\clingo F:\\clingo\\food1.lp F:\\clingo\\fooddata.txt 0  >> F:\\clingo\\foodout.txt
    

    在 Windows 提示符下查看它是否按预期工作。如果它有效,它在从 Java 程序运行时也应该有效。请用适合您环境的路径替换 cligo 路径。

    【讨论】:

      【解决方案3】:

      你的命令必须是这样的:java -jar yourExecuteable.jar yourParameter 在你的情况下:java -jar clingo.jar food1.lp fooddata.txt 0 >>foodout.txt

      【讨论】:

      • 没有要运行的 cligo.jar。您的回答与问题无关。
      最近更新 更多