2012-02-19 7 views
5

コマンドラインツールの実行に少し問題があります。 WinRARからUnRAR.exeを実行したい。私はこれを好きです:Java実行コマンドラインプログラム

Process process = runtime.exec("\"" + unrarPath + "\"" + " x -kb -vp " + "\"" + fileName + "\"", null, f.getParentFile()); 

私の問題は、圧縮ファイルがパスワードで保護されていることです。コンソールでコマンドを実行すると、パスワードを尋ねられます。 Javaに実行させると、プログラムは終了し、ユーザーの入力(パスワード)を待つことはありません。

私はプロセスoutputstreamに書き込もうとしましたが、うまくいきませんでした。 「異なる」環境で実行されるコマンドラインプログラムの動作について知る必要があるものはありますか?

編集:多分私は十分に明確ではありませんでした。私の質問は:Javaでコマンドラインプログラムと対話することは可能ですか?

+0

私は、新しい答えを追加し、古い削除。新しい答えがあなたを満足させることを願っています。 – Kamil

答えて

10

私のために働きます。おそらくあなたは改行を書き、ストリームをフラッシュしませんでしたか?あなたの質問へ

Process tr = Runtime.getRuntime().exec(new String[]{ "cat" }); 
Writer wr = new OutputStreamWriter(tr.getOutputStream()); 
BufferedReader rd = new BufferedReader(new InputStreamReader(tr.getInputStream())); 
wr.write("hello, world\n"); 
wr.flush(); 
String s = rd.readLine(); 
System.out.println(s); 

http://ideone.com/OUGYv

+1、java.lang.Processは私が探していたものでした!

0

処理を実行して対話する方法はほとんどありません。

javaにはProcessクラスがあります。それは、サブプロセス(あなたのJavaアプリケーションによって呼び出されるプロセス)のすべての3つのストリームを取得することができます。 Javaのヘルプの

Processクラス:link

ここでは、Javaでの処理を実行するコードの例をいくつか見つけることができます。link

出力とエラーストリームからのデータが処理を終了した後、あなたのために利用できるようになりますが(あなたのプログラムは、サブプロセスが終了するまで、.exec()メソッドに沿って "停止"されます)。

実行中のプロセスと対話するには、別のスレッドを使用する必要があります。

Using a thread to capture process output

Interacting with another process Java

関連する問題