从Java运行Echo

我正在尝试Runtime.exec()方法来运行命令行进程。

我写了这个示例代码,运行没有问题,但不会在c:\ tmp.txt中生成一个文件。

String cmdLine = "echo foo > c:\\tmp.txt"; Runtime rt = Runtime.getRuntime(); Process pr = rt.exec(cmdLine); BufferedReader input = new BufferedReader( new InputStreamReader(pr.getInputStream())); String line; StringBuilder output = new StringBuilder(); while ((line = input.readLine()) != null) { output.append(line); } int exitVal = pr.waitFor(); logger.info(String.format("Ran command '%s', got exit code %d, output:\n%s", cmdLine, exitVal, output)); 

输出是

INFO 21-04 20:02:03,024 – Ran命令'echo foo> c:\ tmp.txt',退出代码0,输出:foo> c:\ tmp.txt

echo不是Windows下的独立命令,而是嵌入在cmd.exe中。

我相信你需要调用像“cmd.exe / C回声…”的命令。

当shell在cmmand行中运行echo时,shell是由shell解析的,而shell是创建该文件的shell。

当你从Java使用它时,没有shell,命令看作是参数是:

"foo > c:\tmp.txt"

(你可以从执行输出中确认)

您不能仅将“> c:\ tmp.txt”作为命令行的一部分传递给Runtime.exec以进行重定向。 从Javadocs:“所有标准的io(即stdin,stdout,stderr)操作将通过三个流(getOutputStream(),getInputStream(),getErrorStream())重定向到父进程。

如果你想将输出重定向到一个文件,就我所知,唯一的方法就是用Java打开文件,执行getInputStream,然后从进程的输入流中读取数据并写入所需的文件。