在Java中运行DOS命令的问题

时间:2011-01-12 08:22:42

标签: java makefile dos

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

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

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

当我希望我的java程序调用上面的命令时,我喜欢这样:

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

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

5 个答案:

答案 0 :(得分:4)

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

其次,从DOS运行它你不是真的将文件名放在括号中 - 你将系统输入重定向到输入文件到< / em>输出文件,因此逻辑分组为:

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

现在,当您从Java运行它时,它真正尝试将<inputfile.txt>作为第二个命令行参数传递,并将outputfile.txt作为第三个传递。我的猜测是crf_test.exe然后尝试将这些文件作为文件加载,并将“没有这样的文件或目录”作为错误。

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

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

答案 1 :(得分:2)

尖括号是重定向运算符:&lt; inputfile.txt导致输入从inputfile.txt而不是键盘读入,&gt; outputfile.txt导致输出被写入outputfile.txt而不是屏幕。此工具由shell提供,但是在使用Java运行时调用程序时,shell不存在。通过shell调用,如下所示:

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

如果我理解问题,你想打电话

  

crf_test.exe型号

来自文件inputfile.txt的输入并输出到outputfile.txt

您必须重新输入和输出并仅调用crf_test.exe model。如何在how to redirect stdin to java Runtime.exec ?

中描述重定向和退出