2016-04-29 6 views
0

入力jsonファイルに必要なLinuxプロセスに文字列変数を渡そうとしています。しかし、リダイレクト "<"をプログラムが文字列として読み込むことができるようにする必要があります。そうでなければ、ファイル名として読み込みます。Javaのlinuxプログラムに引数としてjsonの出力を渡します。

正しい行動:は/ usr/binに/プログラム<「JSONコンテンツ」

Javaでリダイレクト記号「<」の使用は、私が探しているものではありません引数のために取られていますここで行うこと。

リダイレクト記号をJavaで正しく使用する方法はありますか。

+0

リダイレクトは、Javaアプリケーションでそう基本的には、シェルレベルで行われていますあなたはstdin(つまり[System.in](https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#in))を読む必要があります – user3159253

+0

おっと、それは私ですあなたの質問を誤解しました。あなたはstdinからデータを受け取るべきJavaから外部プロセスを呼び出しますか? – user3159253

+0

@ user3159253 Javaの外部プロセスを呼び出しています。このプロセスは、クラス内の変数からデータを受け取る必要があります。 – Yash

答えて

0

文字はLinuxカーネルによって解釈されないため、シェルによって解釈されます。あなたが行っていることは、シェルに/usr/bin/program \< "json content"と書いた場合と同じです。エスケープされたバックスラッシュに注意してください。

するJavaコードとシェルの動作を再現するには、(より多くのエラー処理で)この線に沿って何かを実行する必要があります。

Process process = new ProcessBuilder("/usr/bin/program").start(); 
BufferedWriter writer = new BufferedWriter(new InputStreamWriter(process.getOutputStream())); 
writer.write("json content\n"); 
writer.close(); // flush stream and send EOF 
+0

私はこれをInputStreamWriterの代わりにOutputStreamWriterで試しました。プロセスは引数を取っていません。引数なしでlinuxプログラムを実行したようです。私はそれがタイミングの問題だと思います(プロセスの実行と入力ストリームの書き込みの間) – Yash

+0

'InputStreamWriter' ??? 'OutputStreamWriter'でなければなりません。 – davmac

関連する問題