我正在尝试使用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
答案 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,然后从进程的输入流中读取并写入所需的文件。