我正在尝试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 - Ran命令'echo foo > c:\tmp.txt',获得退出代码0,输出: foo > c:\tmp.txt
发布于 2010-04-21 17:09:48
echo不是Windows下的独立命令,而是嵌入在cmd.exe中的命令。
我相信您需要调用像"cmd.exe /C echo .“这样的命令。
发布于 2010-04-21 17:18:48
当在cmmand行中运行>时,echo是由shell进行的,创建文件的是shell。
当您从Java中使用它时,没有shell,而命令所看到的参数是:
"foo > c:\tmp.txt"
(从执行输出中可以确认)
发布于 2010-04-21 17:28:28
不能仅仅将"> c:\tmp.txt“作为命令行的一部分传递给Runtime.exec以实现重定向。从Javadocs:“它的所有标准io (即stdin、stdout、stderr)操作将通过三个流(getOutputStream()、getInputStream()、getErrorStream())重定向到父进程。”
如果您想将输出重定向到一个文件,据我所知,唯一的方法是在Java中打开文件,执行getInputStream,然后从进程的输入流中读取并写入所需的文件。
https://stackoverflow.com/questions/2684985
复制相似问题