从Java运行Echo

时间:2010-04-21 17:05:19

标签: java windows exec

我正在尝试使用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

3 个答案:

答案 0 :(得分:8)

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

我相信你需要调用像“cmd.exe / C echo ...”这样的命令。

答案 1 :(得分:4)

>由shell编写,当在{cm}行中运行echo时,它是创建文件的shell。

当你在Java中使用它时,没有shell,并且命令看到的是参数:

"foo > c:\tmp.txt"

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

答案 2 :(得分:1)

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

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