仮想環境の標準入力/標準出力

このQ&Aのポイント
  • 仮想環境UserModeLinuxの標準入力/標準出力を取り出し、Javaのコンソールからコマンドを送信し、結果を出力するプログラムを作成する方法を教えてください。
  • 仮想環境UserModeLinuxでの標準入力/標準出力の取得とJavaのコンソールからコマンドを送信し結果を出力するプログラムの作成方法を教えてください。
  • JavaでUserModeLinuxの仮想環境から標準入力/標準出力を取得し、コンソールからコマンドを送信するプログラムの作成方法を教えてください。
回答を見る
  • ベストアンサー

仮想環境の標準入力/標準出力

仮想環境UserModeLinuxの標準入力/標準出力を取り出し Javaのコンソールからコマンドを送信し、結果を出力するプログラムを作成したいと考えいてます。 プログラムは以下の通りです。 import java.io.*; public class UMLControl { public static void main(String[] args) throws IOException{ /* * UMLの起動 */ String command[] = {"linux.uml", "ubd0=uml-root-hardy", "umid=uml1"}; // UMLを起動するためのプロセス(端末) Process uml_process; uml_process = Runtime.getRuntime().exec(command); // UMLを起動する InputStream is = uml_process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = br.readLine()) != null){ System.out.println(line); } /* * UMLプロセスへの標準入力を渡して、実行するためのソースコード */ // UML本体のプロセス Process process; int uml_number = 1; // 作成したいUMLの数(私の場合は1台のみ) int uml_no = 1; // 起動するUMLのナンバー(私の場合は1台のみ) // プロセスへのコマンドを書き込むための、BufferWiter型のフィールドを宣言する BufferedWriter bufferedwriter[uml_number]; bufferedwriter [uml_no] = new BufferedWriter(new OutputStreamWriter(process.getOutputStream())); // ユーザのコマンドの入力 // バッファリーダーの宣言(文字型入力ストリームから効率よくテキストを読み込む) BufferedReader input = new BufferedReader (new InputStreamReader(System.in), 1); System.out.print("UMLで実行するコマンドを入力してください>>"); String uml_control = input.readLine(); // コマンド(文字列)の入力 // 文字列を送る bufferedwriter[uml_no].write(uml_control); bufferedwriter[uml_no].flush(); /* * 標準入出力を表示するソースコード */ BufferedReader inputreader = new BufferedReader(new InputStreamReader(process.getInputStream())); // コマンドを読むバッファ char[] cbuf = new char[8192]; // 入力を読み込む int numRead = inputreader.read(cbuf); while(numRead != -1){ if(numRead <= 8192){ // 標準入出力の内容を表示する System.out.println(new String(cbuf, 0, numRead)); numRead = inputreader.read(cbuf); } } } } UserModeLinuxの起動まではうまく動作します。 その後の「BufferedWriter bufferedwriter[uml_number];」 のuml_numberの部分で赤線があり、実行しても以下のように表示されます。 Exception in thread "main" java.lang.Error: コンパイル問題が未解決です: トークン "uml_number" に構文エラーがあります。このトークンを削除してください at UMLControl.main(UMLControl.java:28) どのように解決するべきでしょうか。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

俺は指摘のコードを修正後ちゃんと動くか確認したわけではありません、というかする気がありません。 ==================== C言語とかVBとかにやると配列をそう書きたくなりますが Javaの配列の宣言はこうですから >char[] cbuf = new char[8192]; BufferedWriter[] bufferedwriter = new BufferedWriter[uml_number]; であるんじゃないかな、と予測します。

santa1359
質問者

お礼

ありがとうございます。 もう一度きちんと調べて質問し直したいとおもいます。

関連するQ&A

  • 標準入力 System.in について

    いつもお世話になっております。 標準入力についての質問です。 標準入力からデータを入力し、そのデータを表示させる以下のプログラムを作りました。 ------ import java.io.*; class InputTest{ public static void main(String args[]) throws IOException{ String moji; InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.print("文字列を入力してください。 文字 = "); moji = br.readLine(); System.out.println("\n入力した文字列は" + moji + "です。"); } } ------ 上記のソースの「System.in」なのですが、私が参考にしているテキストには 「InputStream クラスのオブジェクト」という説明になっていました。 これまで、オブジェクトは new 演算を使って生成しないと使えないと思っていたのですが… ここでは、事前に java.io を import しているから使えるのでしょうか? それとも、in は System クラスのフィールド(=定数?) なので、使えるのでしょうか? (java.lang のクラスである System クラスは、明示的に import しなくても使えるから) いずれにしても、「java.lang.System.in が、java.io.InputStream のオブジェクト」 ということが理解できません。 分かりにくい説明で申し訳ありませんが、ご教授お願い致します。

    • ベストアンサー
    • Java
  • process has not exited

    実行可能なjarファイルをコマンド実行しその戻り値を取得したくて下記プログラムを書きました。 ところがprocess.exitValue() のところで  process has not exited というエラーを起こしてしまいます。原因はお分かりになりますでしょうか。 String command = "java -jar test.jar test; Process process = Runtime.getRuntime().exec(command); System.out.println("▼▼▼実行中のコマンド=" + command); //int no = process.waitFor(); //exec()が非同期実行であるため実行結果が返ってくるまで待つ System.out.println("▼▼▼コマンドの実行完了"); BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = null; while ( (line = in.readLine())!=null ) { line = in.readLine(); System.out.println(line); } System.out.println("★★★コマンドの戻り値=" + process.exitValue()); if(process.exitValue() != 0) { process.destroy(); } in.close(); } } catch(Exception e) { if( process != null ) { process.destroy(); } e.printStackTrace(); }

    • ベストアンサー
    • Java
  • if文で

    String[]s = new String[1]; s[1] = "1";の1と BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String a = br.readLine();で入力した1は比較できますか?

    • ベストアンサー
    • Java
  • 画面出力の際の繰り返しと入力文字チェック

    いつもお世話になっております。 System.out.println("数字を入力してください"); InputStreamReader reader = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(reader); String str = br.readLine(); int res = Integer.parseInt(str); と記述して画面に出力させた場合、数字以外を入力するとエラーになりますが、入力文字のチェックが可能な方法をご存知の方お願いします。 もうひとつ、作業が終わった後も"数字を入力してください"と繰り返すプログラムについてもご教授ください。 いつも簡単な質問で申し訳ありません・・。一応逆引き辞典で調べてはいるのですが。。

    • ベストアンサー
    • Java
  • doubleで入力するには?

    はじめまして。 Javaの勉強をはじめたばかりです。 質問のしかたが正しいのかもちょっと自信がないのですが、 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); っていうのがありますよね? これの『int』のところを『double』で入力できるように するにはどうすればいいのでしょうか? すごい初心者な質問で申し訳ないですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • 簡単な入力出力のプログラムの間違いがわかりません

    こんにちは、さんたと申します。 よろしくお願い致します。 次のプログラムは、本に載っていたものを写したものです。何回も見直すのですが、エラーが出て止まってしまいます。もし、お分かりになられましたら、教えて下さいましたら幸いです。 よろしくお願い致します。 簡単な入力出力のプログラム(キーボードからの入力を読み込んで、画面に出力する) ********************************* c:\java_study>javac p2.java p2.java:7: ';' がありません。 While((line = in.readLine()) != null) { ^ エラー 1 個 ******************************* import java.io.*; public class p2 { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String line; While((line = in.readLine()) != null) { System.out.println(line); } } }

    • ベストアンサー
    • Java
  • 変数のキーボード入力について

    何度も質問してすみません。javaについて質問できるのここしかないんで・・・。早速質問なのですが、変数のキーボードから入力する方法で import java.io.*; class Sample4 { public static void main(String args[]) throws IOException { System.out.println("文字列を入力してください"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str + "が入力されました"); } } とメモ帳に保存して、コンパイルしたら【文字列を入力してください】(【】は実際には入力してません)とちゃんと出てくるのに次の行にキーボードから入力すると日本語入力が出来なくなります。コマンドプロンプトには日本語入力できないのですか?教えてください。

    • ベストアンサー
    • Java
  • Ctrl+Zが入力されると終了するプログラム

    入力された文字をそのまま表示し、[Ctrl]+Zが入力されると終了するプログラムを組んでいるんですがどのように記述すればよいか困っています。アドバイスお願いします。 public static void main(String args[])throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; do{ str = br.readLine(); System.out.println(str); }while(str == null); }

    • ベストアンサー
    • Java
  • 入出力について

    下記のソースコードで、2点不明な点がありますので ご教授お願い致します。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class ab3{ public static void main(String args[]){ BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in)); try{ System.out.println("名前を入力してください"); String myString = myReader.readLine(); System.out.println(myString + "さん、こんにちわ!"); }catch(IOException e) { } } } 1. BufferedReader myReader = new BufferedReader( new InputStreamReader(System.in)); ここのソースコードについてですが、 new BufferedReader(new InputStreamReader ^^^ ^^^ (System.in)); 「new」が二つもついていますが、何故二つも つける必要があるのでしょうか。 一つであっても問題はないと思われ、 2番目の「new」を取り除くと、エラーが表示されて しまいます。 また、上記ソースコードを BufferedReader myReader ; myReader = InputStreamReader(System.in)); と分割して書こうとしてもエラーが表示されてしまいます。 2. String myString = myReader.readLine(); ここの部分ですが、これはString型のインスタンス(コンストラクタ?)を 作っていると思われますが、この部分を String myString ; myString = myReader.readLine(); または、 String myString = new myReader.readLine(); としてたら、エラーが表示されてしまいます。 JAVAを初めて間もなく、質問の内容がわかりづらいと 思われます。入出力について理解するのに苦労して おりますが、何卒ご教授の程お願い致します。

    • ベストアンサー
    • Java
  • ProcessBuilderの使い方

    ProcessBuilderを使用してMysqlのコマンド(Select文、Create文)を実行することはできないか と思い下記サンプルを作ってみました。まづはmysqlを起動するコマンドを実行してみました。 Eclipse上で実行してみたのですが p.waitFor(); の部分で応答が返ってこなくなります。 何か使い方が間違っていますでしょうか。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ProcessBuilderTest { public static void main(String[] args) { ProcessBuilder pb = new ProcessBuilder("mysql", "-u", "root", "-p", "root"); try { Process p = pb.start(); // ping が完了するのを待つ p.waitFor(); // 実行結果を取得するストリームの種別を出力 System.out.println(pb.redirectInput()); try (BufferedReader br = new BufferedReader( new InputStreamReader(p.getInputStream()))) { // ping結果の出力 for(String line = br.readLine(); line != null; line = br.readLine()) { System.out.println(line); } } } catch (IOException | InterruptedException e) { // 例外ハンドリング処理 } } }