- - PR -
OutputStreamのStringへの変換
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-07-12 11:31
とあるCのプログラムの標準出力をStringの変数に格納し、表示する
プログラムを書いていますがうまく行きません。 Cのプログラム:c:\test.exe Cの実行結果:test /* Java */ String[] command = { "c:\\test.exe" }; ProcessBuilder builder = new ProcessBuilder (command) Process process = builder.start(); OutputStream stream = process.getOutputStream() System.out.println(stream.toString()); Javaの実行結果 java.io.BufferedOutputStream@de6ced "test"と出力されるにはどのようにすればいいでしょうか。 宜しくお願いします。 [ メッセージ編集済み 編集者: ひで 編集日時 2005-07-12 11:48 ] | ||||||||
|
投稿日時: 2005-07-12 12:18
Javaには、「なんでもかんでもクラス(オブジェクト)で処理する」
という特徴があります。予約語も50個ほどありますが、それ以外の 膨大なライブラリはクラスで表現しています。ここまで クラスにこだわる必要ないんじゃないかと思うくらいです。 さて、質問の件ですが、2つほどポイントがあります。 ・標準出力の取得の方向(1) ・取得するにもメソッドを使用する(2)
(1)これはおそらく InputStream stream = process.getInputStream() ですね。
なんでもかんでもオブジェクトで・・・という点で、 Javaはファイルの入出力をするにもコマンドやステートメントではなく オブジェクトを使用します。 InputStreamというオブジェクト(クラス)を使用するのですが、 これで生成したstreamというインスタンス変数は、あくまで 「ファイル入力をするためのオブジェクト」であって、これ自身に データが入っているわけではありません。 おそらく間違いのもとになったのは、Javaには「すべての クラス(オブジェクト)はjava.lang.Objectを先祖に持つ」 という特徴があり、これがtoStringメソッドを持っている ためだと思います。で、このtoStringは、あくまで [InputStream]の内部表現を文字列として表示しているに すぎません。 データを取得するには、readというメソッドを利用します。 テストは行っていないのですが、コーディングするとしたら 以下のようになると思います。(1000文字を超えるとエラーに なります) byte buffer = new byte[1000]; stream.read(buffer); System.out.println(new String(buffer)); (わかりやすく解説するために、用語の使い方が厳密ではありません。 ご了承ください) | ||||||||
|
投稿日時: 2005-07-12 12:27
「外部プログラムによる標準出力を受け取って○○したい」という話はたくさんの方が話題にされていますので、検索ワードを工夫して検索されるとよいでしょう。
たとえば最近では以下のようなスレッドがありました。 BufferedReaderのreadLineについて http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21046&forum=12 [ メッセージ編集済み 編集者: びしばし 編集日時 2005-07-12 12:27 ] | ||||||||
|
投稿日時: 2005-07-12 13:14
以下のようにすることで"test"と表示することができました。
アドバイスありがとうございました。 ProcessBuilder builder = new ProcessBuilder(command); Process p = builder.start(); InputStream is = p.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String strResult = br.readLine(); System.out.println("実行結果:" + new String(strResult)); |
1