【问题标题】:Problem with run DOS command in JavaJava中运行DOS命令的问题
【发布时间】:2011-01-12 08:22:42
【问题描述】:

亲爱的 我想用 Java 执行一个 EXE 文件,但我无法正确执行。 原来在DOS命令提示符下,我的命令是这样的:

C:>\crf_test.exe model <inputfile.txt> outputfile.txt

注意:输入文件名必须放在括号中。在 DOS 窗口中运行它总是给我很好的结果。

当我希望我的 java 程序调用上述命令时,我会这样做:

Process p = Runtime.getRuntime().exec("crf_test.exe model <inputfile.txt> outputfile.txt");

但是,此命令的输出是“没有这样的文件或目录:” 我来宾 Java 不喜欢 DOS 命令中的方括号 。我也删除了 ,但 exe 文件不接受。 那么现在我该如何处理这个问题呢?请给我一个解决方案 非常感谢

【问题讨论】:

  • 你试过exec(new String[]{"crf_test.exe","model","&lt;inputfile.txt&gt;","outputfile.txt"})吗?
  • 或者尝试使用“.\\crf_test.exe ...”而不是“cft_test.exe ...”。我之前在 Linux 上遇到过类似的问题,现在解决了。
  • 参见 [Java exec() 不返回管道连接命令的预期结果](stackoverflow.com/questions/2088917/…)。这个问题涉及管道,但实际上是一回事。管道和重定向 () 都是 shell 的函数,而不是由 exec 处理。这个article 也很有帮助,尤其是“Runtime.exec() 不是命令行”部分。
  • +1 好点。这将是她/他面临的下一个问题)

标签: java cmd makefile


【解决方案1】:

可能存在两个问题。首先,其他人提到的那个 - crf_test.exe 可能不在您的路径中。很难判断您的“没有这样的文件或目录”的输出是来自 crf_test.exe 还是来自试图find crf_test.exe 的 Java。

不过,其次,从 DOS 运行它你并不是真的将文件名放在括号中 - 你正在重定向系统输入 来自 输入文件 to 输出文件,所以逻辑分组是:

crf_test.exe model     < inputfile.txt     > outputfile.txt

现在,当您从 Java 中运行它时,它实际上是在尝试将 &lt;inputfile.txt&gt; 作为第二个命令行参数传递,并将 outputfile.txt 作为第三个参数传递。我的猜测是 crf_test.exe 然后尝试将它们作为文件加载,并给出“没有这样的文件或目录”作为错误。

您需要自己从 inputfile.txt 中加载数据并通过Process.getOutputStream 传入,然后从Process.getInputStream 读取输出并将其写入 outputfile.txt。

或者,您可以运行 cmd.exe 并将整个命令作为参数传递 - 这样 shell 将为您执行重定向,就像您在 DOS 提示符下运行一样。

【讨论】:

    【解决方案2】:

    尖括号是重定向操作符:outputfile.txt 导致将输出写入 outputfile.txt 而不是屏幕。该功能由 shell 提供,但是当使用 Java 运行时调用您的程序时,shell 不存在。通过 shell 调用,如下所示:

    Runtime.getRuntime().exec("cmd /c crf_test.exe model <inputfile.txt> outputfile.txt");
    

    ...或使用 Java 提供的工具重定向输入和输出;参见例如this question.

    【讨论】:

    • 哦,您的解决方案很好地解决了我的问题。非常感谢您的清晰解释。
    【解决方案3】:

    试试这个 进程 p = Runtime.getRuntime().exec("crf_test.exe","/c","model outputfile.txt");

    【讨论】:

      【解决方案4】:

      问题是您当前的执行文件夹中缺少 crf_test.ext。您需要复制可执行文件或使用绝对路径或设置PATH 变量以包含必要的路径。

      【讨论】:

        【解决方案5】:

        如果我没听错,你想打电话

        crf_test.exe 模型

        从文件inputfile.txt 输入并输出到outputfile.txt

        您必须重新输入和输出并仅致电crf_test.exe modelhow to redirect stdin to java Runtime.exec ?

        中描述了如何重定向进出

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多