Java如何接收键盘输入?
- 后端开发
- 2025-07-01
- 7
Scanner类(最常用)
原理:java.util.Scanner 类基于正则表达式解析原始输入,支持多种数据类型(整数、浮点数、字符串等)。
代码示例:
import java.util.Scanner; public class ScannerExample { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 创建Scanner对象 System.out.print("请输入字符串:"); String text = scanner.nextLine(); // 读取整行文本 System.out.print("请输入整数:"); int number = scanner.nextInt(); // 读取整数 System.out.println("您输入了: " + text + " 和 " + number); scanner.close(); // 关闭资源 } }
注意事项:

- 资源释放:必须调用 scanner.close() 避免资源泄漏。
- 输入验证:使用 hasNextInt() 等方法验证输入类型,避免 InputMismatchException。
- 换行符处理:混合使用 nextLine() 和 nextInt() 时,换行符可能导致意外行为,建议用 nextLine() 读取整数后转换为 Integer.parseInt()。
适用场景:命令行工具、学习演示、简单交互程序。
BufferedReader类(高效处理大文本)
原理:java.io.BufferedReader 通过缓冲提升读取效率,需配合 InputStreamReader 将字节流转换为字符流。
代码示例:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BufferedReaderExample { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) { System.out.print("请输入文本:"); String input = reader.readLine(); // 读取整行 System.out.println("您输入了: " + input); } catch (IOException e) { System.err.println("输入错误: " + e.getMessage()); } } }
注意事项:

- 异常处理:必须捕获 IOException。
- 资源管理:使用 try-with-resources 自动关闭流(Java 7+)。
- 类型转换:读取的数字需手动转换,如 Integer.parseInt(reader.readLine())。
适用场景:文件处理、高频输入、大文本读取(如日志分析)。
Console类(安全密码输入)
原理:java.io.Console 专为命令行设计,支持密码隐藏输入(不回显)。
代码示例:

import java.io.Console; public class ConsoleExample { public static void main(String[] args) { Console console = System.console(); if (console == null) { System.err.println("当前环境不支持Console!"); System.exit(1); } String username = console.readLine("用户名:"); // 读取普通输入 char[] password = console.readPassword("密码:"); // 密码以字符数组形式返回 console.printf("登录成功!用户: %s%n", username); // 清空密码数组(安全建议) java.util.Arrays.fill(password, ' '); } }
注意事项:
- 环境限制:仅适用于命令行(IDE如Eclipse/IntelliJ可能返回 null)。
- 密码安全:使用 readPassword() 返回 char[] 而非 String,避免内存残留(用后清空数组)。
- 跨平台:Windows/Linux/macOS均支持。
适用场景:登录认证、敏感信息输入(如密码、密钥)。
方法对比与选型建议
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
| Scanner | 简单易用,支持多数据类型解析 | 性能较低,不自动处理输入验证 | 教学、简单交互程序 |
| BufferedReader | 高效读取大文本,节省I/O开销 | 需手动转换数据类型 | 高频输入、文件处理 |
| Console | 支持密码隐藏输入,安全性高 | 依赖命令行环境 | 安全认证、生产环境命令行工具 |
关键实践建议
- 异常处理:所有输入操作必须捕获 IOException 或 InputMismatchException。
- 输入验证:对用户输入进行有效性检查(如数字范围、非空字符串)。
- 资源释放:Scanner 和 BufferedReader 需显式关闭(或使用 try-with-resources)。
- 安全规范:处理密码时优先选 Console,避免用 String 存储密码。
引用说明基于Oracle官方文档Java Scanner、Java BufferedReader及Java Console,遵循Java SE标准规范,代码示例经过JDK 8~17环境测试验证。