首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java运行Echo

从Java运行Echo
EN

Stack Overflow用户
提问于 2010-04-21 17:05:18
回答 3查看 5.9K关注 0票数 5

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

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

代码语言:javascript
复制
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));

输出是

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-21 17:09:48

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

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

票数 9
EN

Stack Overflow用户

发布于 2010-04-21 17:18:48

当在cmmand行中运行>时,echo是由shell进行的,创建文件的是shell。

当您从Java中使用它时,没有shell,而命令所看到的参数是:

"foo > c:\tmp.txt"

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

票数 4
EN

Stack Overflow用户

发布于 2010-04-21 17:28:28

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2684985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档