我有这个字符串,我在Windows XP的JVM中使用Runtime.exec()。
String cmd = encoderFull + " " + "-i " + originalFull + " "+ "-bitrate" + " " + bitrateVBR[i] + " " + "-bvhq"+ " " + "-avi " + outputFull + " " + "2>&1" + " " + "1>"+ outputFile + ".txt";
幸运的是,'2>& 1 1> output.txt'不起作用。其余的都没问题。有没有办法使用这些命令来创建这个文件?
再见 大卫
答案 0 :(得分:10)
基本上,没有 - Runtime.exec()不支持你要做的事。
请注意,Runtime.exec是而不是一个shell - 对于你明显使用的exec(String),它会对字符串进行标记(以空格作为分隔符),并尝试将第一个令牌作为程序执行,其余的令牌作为该程序的参数。
因此,在您的情况下,重定向运算符将作为参数发送到由'encoderFull'变量命名的应用程序 - 它们不会被shell解释,因为没有shell。
据我所知,你有两个选择:
编写批处理文件(对于Windows)或shell脚本(对于* nix),它执行您的应用程序并执行重定向。然后使用Runtime.exec()
从Runtime.exec创建的进程中读取输出流,并使用java io将内容写入相应的文件
我强烈推荐#1赞成#2
你可能还应该在"When Runtime.exec() won't - Navigate yourself around pitfalls related to the Runtime.exec() method"上阅读这篇文章,然后再继续。