概要
コンソールからの入出力をサポートするクラスとして以下がある。
-
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
でクリアしている)