Ответ
В Java для чтения ввода с консоли (стандартного потока ввода System.in) чаще всего используются классы Scanner и BufferedReader.
1. Использование Scanner (наиболее простой способ для начинающих)
Scanner предоставляет удобные методы для разбора примитивных типов и строк.
import java.util.Scanner;
public class ConsoleInputExample {
public static void main(String[] args) {
// Создание Scanner, связанного с System.in
Scanner scanner = new Scanner(System.in);
System.out.print("Введите ваше имя: ");
String name = scanner.nextLine(); // Чтение всей строки
System.out.print("Введите ваш возраст: ");
int age = scanner.nextInt(); // Чтение целого числа
System.out.printf("Привет, %s! Тебе %d лет.%n", name, age);
scanner.close(); // Важно закрыть ресурс
}
}
Важно: Используйте try-with-resources для гарантированного закрытия ресурса:
try (Scanner scanner = new Scanner(System.in)) {
System.out.print("Введите число: ");
int num = scanner.nextInt();
System.out.println("Вы ввели: " + num);
} // Scanner закроется автоматически
2. Использование BufferedReader (более производительный способ для чтения строк)
BufferedReader читает данные блоками, что эффективнее для большого объема ввода.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BufferedReaderExample {
public static void main(String[] args) throws IOException {
// Обёртываем System.in в InputStreamReader, затем в BufferedReader
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Введите текст: ");
String inputLine = reader.readLine(); // Чтение строки
System.out.println("Вы ввели: " + inputLine);
reader.close();
}
}
Ключевые различия и выбор:
Scannerудобен для разбора ввода по типам (nextInt(),nextDouble()), но может быть медленнее и имеет нюансы сnextLine()послеnextInt()(остаётся символ новой строки).BufferedReaderбыстрее при чтении больших текстовых данных, но работает только со строками, требуя последующего парсинга (например,Integer.parseInt(reader.readLine())).System.console()— ещё один вариант, предоставляющий методыreadLine()иreadPassword()(для скрытия ввода пароля), но он может возвращатьnullв некоторых средах (например, при запуске в IDE).