我正在试用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));
输出为
信息21-04 20:02:03,024-运行命令“echo foo〉c:\tmp.txt”,得到退出代码0,输出:foo〉c:\tmp.txt文件
3条答案
按热度按时间vfh0ocws1#
echo不是Windows下的独立命令,而是嵌入在cmd.exe中。
我认为您需要调用类似“cmd. exe/C echo..."的命令。
zmeyuzjn2#
当
echo
在命令行中运行时,>
由shell解释,并且是shell创建文件。当您在Java中使用它时,没有shell,并且该命令视为参数的内容是:
"foo > c:\tmp.txt"
(您可以从执行输出中确认)
irlmq6kh3#
您不能只是将“〉c:\tmp.txt”作为命令行的一部分传递给Runtime.exec来进行重定向。其所有标准io(即stdin、stdout、stderr)操作将通过三个流(getOutputStream()、getInputStream()、getErrorStream())重定向到父进程。
如果要将输出重定向到一个文件,据我所知,唯一的方法是在Java中打开该文件,执行getInputStream,然后从进程的输入流中读取并写入所需的文件。