[Java] コンソールからデータを受け取る方法(System.in)
こんにちは。明月です。
この投稿はJavaのコンソール環境でユーザからデータを入力させる方法に関する説明です。
Javaのプログラミングをすると「System.out.println」関数をよく使います。「System.out.println」関数はデータをコンソールに表示する関数です。
Eclipse(IDE)の開発環境では「sysout」だけ入力しても自動変換(Intellisense)機能で自動に変換されます。
逆に「System.in」という関数は無いかと思ったら、逆にコンソールからデータを入力するスキャン関数であります。
Copy! [Source view] Example.javapublic 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」という値を受け取って、出力しました。
上のとおりに作成しても問題ないですが、バッファを設定することが気になります。
Copy! [Source view] Example.javaimport 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のコンソール環境でユーザからデータを入力させる方法に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。