从Java运行Echo
我正在试用Runtime.exec()方法来运行命令行进程 我编写了这个示例代码,它运行时没有问题,但不会在c:\tmp.txt处生成文件从Java运行Echo,java,windows,exec,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(
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:03024-Ran命令
'echo foo>c:\tmp.txt',获得退出代码
0,输出:foo>c:\tmp.txt
echo不是Windows下的独立命令,而是嵌入cmd.exe中的命令
我相信您需要调用像“cmd.exe/C echo…”这样的命令。当在cmmand行中运行
echo
时,由shell勇敢地执行,而创建文件的是shell
当您从Java使用它时,没有shell,并且该命令将其视为参数:
“foo>c:\tmp.txt”
(您可以从执行输出中确认)您不能将“>c:\tmp.txt”作为命令行的一部分传递给Runtime.exec以实现重定向。Javadocs中写道:“它的所有标准io(即stdin、stdout、stderr)操作将通过三个流(getOutputStream()、getInputStream()、getErrorStream())重定向到父进程。”
如果要将输出重定向到文件,据我所知,唯一的方法是用Java打开文件,执行getInputStream,然后从进程的输入流中读取并写入所需的文件。这不是问题,因为退出代码为0(表示成功),问题在于文件重定向(
)由shell/cmd.exe处理,因此不应用。但是解决方案仍然是一样的。