Java中运行DOS命令的问题

Java中运行DOS命令的问题,java,makefile,dos,Java,Makefile,Dos,各位亲爱的 我想用Java执行一个EXE文件,但我无法正确执行。 最初,在DOS命令提示符下,我的命令如下: C:>\crf_test.exe model <inputfile.txt> outputfile.txt Process p = Runtime.getRuntime().exec("crf_test.exe model <inputfile.txt> outputfile.txt"); Runtime.getRuntime().exec("cmd /

各位亲爱的 我想用Java执行一个EXE文件,但我无法正确执行。 最初,在DOS命令提示符下,我的命令如下:

C:>\crf_test.exe model <inputfile.txt> outputfile.txt
Process p = Runtime.getRuntime().exec("crf_test.exe model <inputfile.txt> outputfile.txt");
Runtime.getRuntime().exec("cmd /c crf_test.exe model <inputfile.txt> outputfile.txt");
C:>\crf\u test.exe model outputfile.txt
注意:输入文件名必须放在括号中。在DOS窗口中运行时,它总是给我带来很好的效果

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

C:>\crf_test.exe model <inputfile.txt> outputfile.txt
Process p = Runtime.getRuntime().exec("crf_test.exe model <inputfile.txt> outputfile.txt");
Runtime.getRuntime().exec("cmd /c crf_test.exe model <inputfile.txt> outputfile.txt");
processp=Runtime.getRuntime().exec(“crf_test.exe model outputfile.txt”);
但是,此命令的输出为“无此类文件或目录:” 我不喜欢DOS命令中的括号。我也删除了,但exe文件不接受。 那么现在我该如何处理这个问题呢?请给我一个解决方案
非常感谢

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

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

第二,从DOS运行时,您并没有真正将文件名放在括号中,而是将系统输入从输入文件重定向到输出文件,因此逻辑分组为:

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

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


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

如果我正确理解问题,您希望调用

crf_test.exe模型

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


您必须重新校正输入和输出,只调用
crf\u test.exe model
。如何重定向输入和输出在

中进行了描述尖括号是重定向操作符:outputfile.txt导致输出写入outputfile.txt而不是屏幕。这个工具是由shell提供的,但是当用Java运行时调用程序时,shell并不存在。通过shell调用,如下所示:

C:>\crf_test.exe model <inputfile.txt> outputfile.txt
Process p = Runtime.getRuntime().exec("crf_test.exe model <inputfile.txt> outputfile.txt");
Runtime.getRuntime().exec("cmd /c crf_test.exe model <inputfile.txt> outputfile.txt");
Runtime.getRuntime().exec(“cmd/c crf_test.exe model outputfile.txt”);
…或使用Java提供的工具重定向输入和输出;请参见例如…

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

您是否尝试过
exec(新字符串[]{“crf_test.exe”、“model”、“”、“outputfile.txt”})
?或者尝试使用“\\crf_test.exe…”而不是“cft_test.exe…”。我以前在Linux上遇到过类似的问题,这就解决了它。请参阅[Java exec()不返回管道连接命令的预期结果]()。这个问题涉及管道,但实际上是一样的。管道和重定向()都是shell的函数,不由
exec
处理。这也很有帮助,特别是“Runtime.exec()不是命令行”部分。+1很好。这将是他/她将面临的下一个问题)哦,你的解决方案很好地解决了我的问题。非常感谢你清楚的解释。