小编典典

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

java

我有在Windows XP的JVM中与Runtime.exec()一起使用的String。

String cmd = encoderFull + " " + "-i " + originalFull + " "+ "-bitrate" + " " + bitrateVBR[i] + " " + "-bvhq"+ " " + "-avi " + outputFull + " " + "2>&1" + " " + "1>"+ outputFile + ".txt";

不幸的是,‘2>&1 1> output.txt’无法正常工作。其余的还可以。有没有一种使用命令的方式来创建此文件?

再见,大卫


阅读 314

收藏
2020-11-26

共1个答案

小编典典

基本上,不-Runtime.exec()不支持您要执行的操作。

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

因此,在您的情况下,重定向运算符将作为参数发送到以’encoderFull’变量命名的应用程序-外壳程序将不会像您期望的那样解释它们,因为没有外壳程序。

据我所知,您有两种选择:

  1. 编写一个批处理文件(对于Windows)或Shell脚本(对于* nix),该文件将执行您的应用程序并执行重定向。然后使用Runtime.exec(),以批处理文件/ shell脚本为参数,调用外壳程序(cmd或sh或您拥有什么)

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

我强烈建议#1推荐#2

在继续之前,您可能还应该阅读有关“何时Runtime.exec()不会-
导航与Runtime.exec()方法相关的陷阱”的文章

2020-11-26