2012-02-04 22 views
2

Hy、javaでパスワードの入力を求めるときにcmd行を実行する方法

Javaアプリケーションからpostgresqlデータベースをダンプしようとしました。

CMDでは、[OK]を行く:

pg_dump -U user database>outfile.sql 

とCMDは私のjavaから、このコマンドラインにアクセスするにはパスワード

を求めるプロンプトが表示されます

Runtime.getRuntime().exec("pg_dump -U user database>outfile.sql"); 

、今では、パスワードの入力を待ちます。

私はRuntime.getRuntime().exec(String[])...で試しましたが、何もしませんでした。

どういうわけか、私は.exec()メソッドのパラメータ「パスワード」を設定する必要があり、

pg_dumpの文は、それのコマンドラインでパスワードを受け付けません。..

答えて

0

で説明するように、プロセスの標準入力をリダイレクトすることができthis question

本質的に、彼らはProcess.getInputStreamメソッドを利用し、このメソッドから返されるストリームに書き込みます(BufferedWriterなど)。

exec()メソッドで返される必要なオブジェクトはProcessです。

0

おかげでマックス、

私はこの

Process p = Runtime.getRuntime().exec(cmd); 
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(p.getOutputStream())); 
    bw.write("password"); 
    //bw.eriteLine(); 
    bw.flush(); 

が、まだ何もしてみました。私はInputStreamReaderを使用して、cmd実行からのエラーやメッセージを表示し、nothigを表示しました。それはまだ 'パスワード'を待つ。

しかし、私は別の解決策を持っていた:

Process p = Runtime.getRuntime().exec("cmd /c start cmd.exe /C\"pg_dump -U user -W db>outfile.sql\""); 

ので、黒のプロンプターは、 'パスワード:' で開きます。パスワードを書いて、Enterキーを押すと消えます。

私にとっては十分です。

ありがとうございました

0

「Enter」キーを押してください。 この変更は私のためのトリックでした:

bw.write("password" + "\n");