在Java Runtime Exec中使用重定向运算符

时间:2012-09-12 01:20:35

标签: java windows

我有这个字符串,我在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'不起作用。其余的都没问题。有没有办法使用这些命令来创建这个文件?

再见 大卫

1 个答案:

答案 0 :(得分:10)

基本上,没有 - Runtime.exec()不支持你要做的事。

请注意,Runtime.exec是而不是一个shell - 对于你明显使用的exec(String),它会对字符串进行标记(以空格作为分隔符),并尝试将第一个令牌作为程序执行,其余的令牌作为该程序的参数。

因此,在您的情况下,重定向运算符将作为参数发送到由'encoderFull'变量命名的应用程序 - 它们不会被shell解释,因为没有shell。

据我所知,你有两个选择:

  1. 编写批处理文件(对于Windows)或shell脚本(对于* nix),它执行您的应用程序并执行重定向。然后使用Runtime.exec()

  2. 以批处理文件/ shell脚本作为参数调用shell(cmd或sh,或者你有什么)
  3. 从Runtime.exec创建的进程中读取输出流,并使用java io将内容写入相应的文件

  4. 我强烈推荐#1赞成#2

    你可能还应该在"When Runtime.exec() won't - Navigate yourself around pitfalls related to the Runtime.exec() method"上阅读这篇文章,然后再继续。