在 Java 中,使用 Scanner 读取文件里的数字并求和是一个基础但容易出错的场景。Scanner 默认以空白字符作为分隔符,因此只要文件中的数字之间用空格或换行隔开,就可以逐个读取并累加。

基本读取与求和思路
核心步骤是先通过 File 和 Scanner 关联文件,再用 hasNextDouble 或 hasNextInt 判断还有没有数字,最后用 nextDouble 或 nextInt 取值并累加。这样能避免因为格式问题导致程序抛出异常。
读取整数并求和示例
下面代码演示如何从文本文件中读取所有整数并计算总和:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class SumFromFile {
public static void main(String[] args) {
// 文件路径请根据实际情况修改
String path = "numbers.txt";
int sum = 0;
try {
// 创建 Scanner 关联文件
Scanner sc = new Scanner(new File(path));
// 只要还有下一个整数就继续读取
while (sc.hasNextInt()) {
sum += sc.nextInt();
}
sc.close();
System.out.println("整数总和为: " + sum);
} catch (FileNotFoundException e) {
// 文件不存在时给出提示
System.out.println("未找到文件: " + path);
}
}
}
读取小数并求和示例
如果文件中是小数,只需把判断和读取方法换成 double 相关即可:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class SumDoubleFromFile {
public static void main(String[] args) {
String path = "doubles.txt";
double sum = 0.0;
try {
Scanner sc = new Scanner(new File(path));
while (sc.hasNextDouble()) {
sum += sc.nextDouble();
}
sc.close();
System.out.println("小数总和为: " + sum);
} catch (FileNotFoundException e) {
System.out.println("未找到文件: " + path);
}
}
}
常见错误与处理办法
文件中混有非数字内容
当文件里夹杂文字时,hasNextInt 会自动跳过无法解析为数字的内容吗?并不会。如果遇到非数字且非分隔符的文本,hasNextInt 会返回 false,循环结束,后续数字不会被读取。此时可以用 hasNext 配合 next 跳过无关词:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class SkipTextSum {
public static void main(String[] args) throws FileNotFoundException {
Scanner sc = new Scanner(new File("mix.txt"));
int sum = 0;
while (sc.hasNext()) {
// 如果是整数则累加,否则跳过该词
if (sc.hasNextInt()) {
sum += sc.nextInt();
} else {
sc.next();
}
}
sc.close();
System.out.println("混合文件整数总和: " + sum);
}
}
没有关闭 Scanner
虽然小程序中不关闭也能跑,但养成用 close 或 try-with-resources 释放资源的习惯更好,可以避免文件句柄占用。
小结
使用 Java Scanner 正确读取文件数字并求和,重点在于根据数据类型选用 hasNextInt 或 hasNextDouble 做循环判断,并注意混合内容时的跳过处理。掌握这些写法后,就能稳定完成常见的文件数字统计任务。