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

use*_*377 1 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'不起作用.其余的都没问题.有没有办法使用命令,以便创建此文件?

再见,大卫

Gre*_*eek 10

基本上,没有 - Runtime.exec()不支持您尝试执行的操作.

请注意,Runtime.exec 不是 shell - 在exec(String)的情况下,您显然正在使用它,它将字符串标记(以空格作为分隔符),并尝试将第一个标记作为程序执行,其余的令牌作为该计划的参数.

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

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

  1. 编写批处理文件(对于Windows)或shell脚本(对于*nix),它执行您的应用程序并执行重定向.然后使用Runtime.exec()以批处理文件/ shell脚本作为参数调用shell(cmd或sh,或者你有什么)

  2. 从Runtime.exec创建的进程中读取输出流,并使用java io将内容写入相应的文件

我强烈推荐#1赞成#2

您可能还应该阅读这篇文章"当Runtime.exec()不会 -在继续前进之前,自己导航一下与Runtime.exec()方法相关的陷阱".