[Java] コンソールからデータを受け取る方法(System.in)


Devlopment note / Java    作成日付 : 2020/02/25 03:00:00   修正日付 : 2020/02/25 03:00:00

こんにちは。明月です。


この投稿はJavaのコンソール環境でユーザからデータを入力させる方法に関する説明です。

Javaのプログラミングをすると「System.out.println」関数をよく使います。「System.out.println」関数はデータをコンソールに表示する関数です。

Eclipse(IDE)の開発環境では「sysout」だけ入力しても自動変換(Intellisense)機能で自動に変換されます。


逆に「System.in」という関数は無いかと思ったら、逆にコンソールからデータを入力するスキャン関数であります。

public class Example {
  public static void main(String[] args) {
    try {
      // データバッファ
      byte[] data = new byte[4096];
      // コンソールから入力されるSystem.in.read関数
      System.in.read(data, 0, 4096);
      // バッファでStringに変換
      String buffer = new String(data);
      // \0の値を除く。
      buffer = buffer.trim();
      // 結果出力
      System.out.println("Result : " + buffer);
    } catch (Throwable e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}


例をみればコンソールから「test」という値を受け取って、出力しました。

上のとおりに作成しても問題ないですが、バッファを設定することが気になります。

import java.util.Scanner;	

public class Example {
  public static void main(String[] args) {
    // リソース概念があるので、管理がしやすい。
    // バッファ設定がないのでソースがシンプルになる。
    try(Scanner scanner = new Scanner(System.in)) {
      // コンソールから値を受取る。
      String buffer = scanner.nextLine();	
      // コンソールに出力する。
      System.out.println("Result : " + buffer);	
    }	
  }	
}


結果は同じですが、コネクションがあるので、リソース管理がしやすいです。(コンソールもIOなので結局リソースです。)

try ~ catchもなくなるし、バッファ設定がないので、コードがシンプルになりました。


ここまでJavaのコンソール環境でユーザからデータを入力させる方法に関する説明でした。


ご不明なところや間違いところがあればコメントしてください。

最新投稿