2011-01-12 17 views
0

親愛なるすべて EXEファイルをJavaで実行したいが、正しく実行できませんでした。 はもともと、DOSコマンドプロンプトで、私のコマンドは、このようなものです:JavaでDOSコマンドを実行すると問題が発生する

C:>\crf_test.exe model <inputfile.txt> outputfile.txt 

注:入力ファイル名がカッコ<>で行われなければなりません。 DOSウィンドウで実行すると、常に良い結果が得られました。

私は私のJavaプログラムは、上記のコマンド呼び出したいとき、私は次のように実行します。

Process p = Runtime.getRuntime().exec("crf_test.exe model <inputfile.txt> outputfile.txt"); 

しかし、このコマンドの出力はありません「そのようなファイルまたはディレクトリ:」Javaはない IゲストDOSコマンドで角括弧<>のように入力します。私も<を削除しますが、exeファイルはそれを受け入れませんでした。 これでどのようにこの問題に対処できますか?私に解決策を教えてください ありがとうございました

+0

あなたは 'exec(new String [] {" crf_test.exe "、" model "、" "、" outputfile.txt "})'を試したことがありますか? – rodion

+0

また、 "cft_test.exe ..."の代わりに "。\\ crf_test.exe ..."を使用してみてください。私はこれまでLinuxでこれと同様の問題を抱えていましたが、これで解決しました。 – rodion

+2

[Java exec()はパイプの接続されたコマンド の期待される結果を返しません](http://stackoverflow.com/questions/2088917/java-exec-does-not-return-expected-result-of-pipes-接続されたコマンド)。その質問はパイプに対処しますが、実際には同じことです。パイプとリダイレクト(<, >)は両方ともシェルの関数であり、 'exec'で処理されません。この[記事](http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4)も役立ちます。特に、「Runtime.exec()はコマンドライン "を参照してください。 –

答えて

2

に記載されています。山括弧は、<入力ファイルです。txtを指定すると、キーボードの代わりにinputfile.txtから入力が読み込まれます。> outputfile.txtは、画面の代わりにoutputfile.txtに出力を書き出します。この機能はシェルによって提供されますが、Javaランタイムでプログラムを呼び出すときにシェルが存在しません。シェルで呼び出すには、次のようにします。

Runtime.getRuntime().exec("cmd /c crf_test.exe model <inputfile.txt> outputfile.txt"); 

...またはJavaで提供される機能を使用して入出力をリダイレクトします。例えば、 this question

+0

ああ、あなたの解決策は私の問題をすばらしく解決します。明確な説明をいただきありがとうございます。 –

0

問題は、現在の実行フォルダにcrf_test.extがないことです。実行可能ファイルをコピーするか、絶対パスを使用するか、PATH変数に必要なパスを含める必要があります。

4

潜在的に2つの問題があります。まず、他の人が言及しているもの - crf_test.exeがあなたのパスにないかもしれません。 「そのようなファイルやディレクトリがない」という出力がcrf_test.exeか、Javaのにあるかどうかを確認するのは難しいです。 crf_test.exeを見つけてください。第二に

しかし、あなたは本当には、角カッコでファイル名を入れてじゃないDOSからそれを実行している - あなたは、出力ファイルへの入力ファイルからシステム入力をリダイレクトしているので、論理グループは、次のとおりです。

crf_test.exe model  < inputfile.txt  > outputfile.txt 

Javaから実行しているときは、真に第2のコマンドライン引数として<inputfile.txt>を、第3の引数としてoutputfile.txtを渡そうとしています。私の推測では、crf_test.exeはそれらをファイルとしてロードし、「no such such file or directory」をエラーとして与えようとしています。

あなたはinputfile.txtからデータをロードしてProcess.getOutputStreamで渡してから、Process.getInputStreamの出力を読み、outputfile.txtに書き込む必要があります。

また、cmd.exeを実行して、引数としてコマンド全体を渡すこともできます。つまり、シェルはDOSプロンプトから実行しているかのようにリダイレクトを実行します。

0

私は右の問題を理解していれば、あなたはoutputfile.txt

にファイルinputfile.txtと出力からの入力と

crf_test.exeモデル

を呼びたいあなたがでredrectする必要があると電話のみcrf_test.exe model。リダイレクトの出入り方は、how to redirect stdin to java Runtime.exec ?

1

これを試してください プロセスp = Runtime.getRuntime()。exec( "crf_test.exe"、 "/ c"、 "model outputfile.txt");

関連する問題