从java程序内部执行cmd命令

时间:2017-04-24 22:09:31

标签: java windows cmd process runtime

我正在尝试使用以下代码在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

clingo是一个Windows可执行程序。在命令提示符下运行时,此命令正常工作。我想通过单击按钮在java程序中运行它。我为clingo设置了环境变量。 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。感谢。

3 个答案:

答案 0 :(得分:0)

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

您必须调用命令解释程序来运行您的程序:

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 /c部分,就像在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程序运行时工作。请用适合您环境的正确路径替换clingo路径。

答案 1 :(得分:0)

你说你的命令使用命令提示符。好。如果仔细观察,命令窗口会有一个路径条目(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

答案 2 :(得分:-1)

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