亲爱的 我想用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文件不接受。 那么现在我该如何处理这个问题呢?请给我一个解决方案 非常感谢
答案 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 ?