0
1

More than 1 year has passed since last update.

【JavaGold】SystemクラスとConsoleクラス

Last updated at Posted at 2023-07-21

概要

コンソールからの入出力をサポートするクラスとして以下がある。

  • java.lang.Systemクラス
  • java.io.Consoleクラス

java.lang.Systemクラス

InputStreamオブジェクトであるinフィールドを使用し、Javaプログラムで標準入力を取得する。

inフィールドの宣言は以下である。

public final static InputStream in;

inフィールドはjava.io.InputStreamクラスのインスタンスであり、デフォルトではコンソールからの入力を受け取る。
Javaプログラムでは、System.inを使用してユーザーからの入力を読み取ることができる。

InputStreamクラスのread()メソッドを使用して、1バイトずつ標準入力からデータを読み込むことや、Scannerクラスなどを使用してより高レベルの入力操作を行うこともできる。

import java.io.IOException;

public class ReadFromConsole {
    public static void main(String[] args) {
        try {
            System.out.print("Enter your name: ");
            int character;
            while ((character = System.in.read()) != '\n') {
                System.out.print((char) character);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

この例では、System.in.read()メソッドを使用してユーザーからの入力を1バイトずつ読み取り、改行文字(\n)が入力されるまでユーザーに名前の入力を求める。

java.io.Consoleクラス

上記のようなコンソールからの入力を受け取る方法をより簡略化するために導入されたクラス。

主なメソッド
  • String readLine()
    ユーザーが入力するまで1行の文字列を読み取る。
  • char[] readPassword()
    パスワードのような機密情報を入力する場合に使用する。入力されたパスワードはchar[]として返される。

Stringとして直接アクセスされないため、パスワードを入力する場合はSystem.inを直接使用せずにConsole.readPassword()メソッドを使用することでセキュリティ上の問題を回避することができる。

  • PrintWriter writer()
    コンソールに対して書き込むためのPrintWriterオブジェクトを取得する。
例(readPassword()メソッド)
import java.io.Console;

public class ReadPasswordExample {
    public static void main(String[] args) {
        Console console = System.console();
        if (console == null) {
            System.out.println("コンソールが利用できません。");
            System.exit(1);
        }

        char[] password = console.readPassword("パスワードを入力してください: ");
        System.out.println("入力されたパスワード: " + new String(password));

        // パスワードの内容をクリアするために配列をフィルイン
        for (int i = 0; i < password.length; i++) {
            password[i] = '\0';
        }
    }
}

この例では、System.console()メソッドを使用してコンソールを取得し、readPassword()メソッドを呼び出してユーザーにパスワードの入力を促している。
ユーザーが入力したパスワードはchar[]として返され、Stringとして直接アクセスされない。

readPassword()メソッドはコンソールに入力した内容を表示せずに受け付けるが、パスワードをコンソールから直接読み取るため、入力内容はそのまま出力される。
パスワードの内容をログに残すなどのセキュリティ上のリスクを避けるために、パスワードの使用が終了したら配列の内容をクリアすることが重要である。
(例では\0でクリアしている)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1