1

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

再见,大卫

4

1 回答 1

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() 方法相关的陷阱”的文章。

于 2012-09-12T01:34:52.713 回答