上一篇
在Java中读取数值,通常使用
Scanner类的
nextInt()、
nextDouble()等方法,或通过
BufferedReader读取字符串后转换为数值类型(如
Integer.parseInt())。
在Java中读取数值是编程中的基础操作,广泛应用于用户输入、文件解析或数据处理等场景,本文详细讲解多种读取方法,涵盖控制台输入、文件读取以及命令行参数等场景,并提供代码示例和关键注意事项,助你高效掌握技术要点。
核心方法及代码示例
使用 Scanner 类(控制台输入)
Scanner 是 java.util 包中的工具类,适合读取控制台输入的数值。
import java.util.Scanner;
public class ReadNumbers {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入整数: ");
int numInt = scanner.nextInt(); // 读取整数
System.out.print("请输入浮点数: ");
double numDouble = scanner.nextDouble(); // 读取双精度浮点数
System.out.println("整数: " + numInt + ", 浮点数: " + numDouble);
scanner.close(); // 关闭资源
}
}
关键点:
nextInt()、nextDouble()等直接解析数值类型。- 输入非数值会抛出
InputMismatchException,需用try-catch处理。 - 务必调用
close()释放资源,或使用 Try-with-Resources 自动关闭:try (Scanner scanner = new Scanner(System.in)) { int num = scanner.nextInt(); } // 自动关闭
使用 BufferedReader + InputStreamReader(高效读取)
适合处理大量输入或需要更高性能的场景:

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ReadNumbersBuffered {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入整数: ");
int num = Integer.parseInt(reader.readLine()); // 字符串转整数
System.out.println("读取的整数: " + num);
reader.close();
}
}
优势与风险:
readLine()读取整行文本,需手动转换数值(Integer.parseInt()或Double.parseDouble())。- 转换失败会抛出
NumberFormatException,必须捕获处理:try { int num = Integer.parseInt(reader.readLine()); } catch (NumberFormatException e) { System.out.println("输入格式错误!"); }
从命令行参数读取
通过 main 方法的 args 数组获取启动时传递的数值:
public class CommandLineInput {
public static void main(String[] args) {
if (args.length >= 2) {
int num1 = Integer.parseInt(args[0]); // 第一个参数
double num2 = Double.parseDouble(args[1]); // 第二个参数
System.out.println("结果: " + (num1 + num2));
} else {
System.out.println("请提供两个数值参数!");
}
}
}
执行命令:

java CommandLineInput 5 3.2
从文件读取数值
使用 Scanner 或 BufferedReader 读取文件中的数值:
import java.io.File;
import java.util.Scanner;
public class ReadFile {
public static void main(String[] args) {
try (Scanner fileScanner = new Scanner(new File("data.txt"))) {
while (fileScanner.hasNextDouble()) {
double value = fileScanner.nextDouble();
System.out.println("读取值: " + value);
}
} catch (FileNotFoundException e) {
System.out.println("文件未找到!");
}
}
}
```示例**(`data.txt`):
10 20.5 30
---
### 二、关键注意事项
1. **异常处理**
数值转换或输入操作可能引发异常:
- `InputMismatchException`:输入类型不匹配(`Scanner`)。
- `NumberFormatException`:字符串转换失败(`parseInt`/`parseDouble`)。
- `IOException`:文件读写错误。
**务必使用 `try-catch` 或声明 `throws` 处理**。
2. **资源管理**
`Scanner`、`BufferedReader` 等需显式关闭:
- 优先使用 **Try-with-Resources**(Java 7+)自动关闭。
- 避免资源泄漏导致性能问题。
3. **输入验证**
在转换前检查输入有效性:
```java
if (scanner.hasNextInt()) {
int num = scanner.nextInt(); // 安全读取
}
- 数值范围
int范围:-2^31至2^31-1(约 ±21亿)。- 超出范围会抛出异常,大数值需用
long或BigInteger。
方法对比与选择建议
| 方法 | 适用场景 | 性能 | 易用性 |
|---|---|---|---|
Scanner |
控制台输入、简单文件解析 | 中等 | |
BufferedReader |
大数据量读取(如日志文件) | 高 | |
命令行参数 (args) |
启动时传递参数 | 最高 | |
文件读取(Scanner) |
结构化文本文件(空格分隔数值) | 中等 |
推荐场景:
- 交互式控制台输入 →
Scanner。 - 批量处理文件数据 →
BufferedReader。 - 脚本化参数传递 → 命令行
args。
Java读取数值的核心在于选择合适工具(Scanner/BufferedReader)和严谨处理异常与资源,无论用户输入、文件解析或参数传递,均需:

- 验证输入有效性,
- 捕获并处理异常,
- 确保资源释放,
- 根据场景优化性能。
通过上述方法组合,可高效应对各类数值读取需求,构建健壮的Java应用程序。
引用说明: 参考 Oracle 官方 Java 文档,权威技术来源确保信息准确性:
- Scanner 类文档
- BufferedReader 类文档
- Java 数值处理规范(JLS §4.2)
