Перейти к основному содержимому

Класс Console

Специально для работы с консолью в Java определён класс Console, который хранится в пакете java.io. Он предоставляет доступ к консольному устройству, связанному с текущей виртуальной машиной Java, и не является обёрткой над объектами System.in и System.out. Но в то же время Console значительно упрощает ряд операций, связанных с консолью.

Для получения объекта консоли надо вызвать статический метод System.console():

Console console = System.console();

Основные методы класса Console:

  • flush(): выводит в консоль все данные из буфера.
  • format(): выводит в консоль строку с использованием форматирования.
  • printf(): выводит в консоль строку с использованием форматирования (фактически то же самое, что и предыдущий метод).
  • String readLine(): считывает с консоли введённую пользователем строку.
  • char[] readPassword(): считывает с консоли введённую пользователем строку, при этом символы строки не отображаются в консоли.

Если достигнут конец ввода и данные не прочитаны, readLine() и readPassword() возвращают null. Нажатие Enter без текста возвращает пустую строку или пустой массив соответственно.

Используем класс Console:

import java.io.Console;

public class Program {

public static void main(String[] args) {

// получаем консоль
Console console = System.console();
if (console != null) {
// считываем данные с консоли
String login = console.readLine("Введите логин:");
if (login == null) {
return;
}

char[] password = console.readPassword("Введите пароль:");
if (password == null) {
return;
}

console.printf("Введённый логин: %s \n", login);
console.printf("Введённый пароль: %s \n", new String(password));
}
}
}

Выражение new String(password) создаёт строку из символов массива; password.toString() не возвращает его содержимое. В примере результаты чтения проверяются на null: при конце ввода программа завершается. Вывод пароля приведён только для демонстрации; в реальной программе пароль не следует выводить на экран.

Важно, что доступность консоли зависит от платформы и способа запуска программы. При обычном запуске через окно Run в IntelliJ IDEA консоль может отсутствовать. Если у виртуальной машины нет консольного устройства, System.console() возвращает null. Поэтому при работе с консолью желательно проверять полученное значение на null: вызов console.readLine() при console == null приведёт к NullPointerException. Ну а если мы запустим программу на Java 21 в интерактивной командной строке без перенаправления стандартного ввода и вывода, то консоль обычно будет доступна.