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 はシェルではないことに注意してください。明らかに使用している exec(String) の場合、文字列をトークン化し (区切り文字として空白を使用)、最初のトークンをプログラムとして実行しようとします。残りのトークンをそのプログラムへの引数として。

したがって、あなたの場合、リダイレクト演算子は、「encoderFull」変数によって名前が付けられたアプリケーションにパラメーターとして送信されます-シェルがないため、期待どおりにシェルによって解釈されません。

私の知る限り、ここには 2 つの選択肢があります。

  1. アプリケーションを実行してリダイレクトを行うバッチ ファイル (Windows の場合) またはシェル スクリプト (*nix の場合) を記述します。次に、Runtime.exec() を使用して、バッチ ファイル/シェル スクリプトを引数として、シェル (cmd または sh、または what-have-you) を呼び出します。

  2. Runtime.exec によって作成されたプロセスから出力ストリームを読み取り、java io を使用してコンテンツを適切なファイルに書き込みます。

#1よりも#2を強くお勧めします

さらに先に進む前に、 「Runtime.exec() が機能しない場合 - Runtime.exec() メソッドに関連する落とし穴を回避する」に関する記事もお読みください。

于 2012-09-12T01:34:52.713 に答える