You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何从目录逐行读取文件并处理每行数值?

解决Java读取目录下文件并逐行处理数字的问题

你已经通过listFiles()拿到了目录下的文件数组,接下来只需要遍历这个数组,逐个将文件传入Scanner即可。下面是包含异常处理和资源管理的完整实现代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class FileNumberProcessor {
    private String folderPath = "你的目录路径";

    public void processFiles() {
        File directory = new File(folderPath);
        File[] files = directory.listFiles();

        // 先判断目录有效性及是否有文件
        if (files == null || files.length == 0) {
            System.out.println("目录无效或目录下无文件");
            return;
        }

        // 遍历目录下所有文件
        for (File file : files) {
            // 跳过子目录,仅处理普通文件
            if (!file.isFile()) {
                continue;
            }

            // 使用try-with-resources自动关闭Scanner,避免资源泄漏
            try (Scanner scanner = new Scanner(file)) {
                double total = 0;
                int count = 0;

                // 逐行读取文件内容
                while (scanner.hasNextLine()) {
                    String line = scanner.nextLine().trim();
                    // 跳过空行
                    if (line.isEmpty()) {
                        continue;
                    }

                    try {
                        // 将每行内容转为数字并执行计算
                        double number = Double.parseDouble(line);
                        total += number;
                        count++;
                        // 可在此添加其他计算逻辑,比如求最大值、最小值等
                    } catch (NumberFormatException e) {
                        System.out.printf("文件%s中存在非数字行:%s%n", file.getName(), line);
                    }
                }

                // 输出当前文件的计算结果
                System.out.printf("文件%s处理完成:共%d个数字,总和为%.2f%n", file.getName(), count, total);

            } catch (FileNotFoundException e) {
                System.out.printf("文件%s未找到或无法读取%n", file.getName());
            }
        }
    }

    public static void main(String[] args) {
        new FileNumberProcessor().processFiles();
    }
}

关键要点说明

  • 遍历文件数组:用增强for循环逐个处理files数组元素,通过isFile()跳过子目录,只处理普通文件。
  • Scanner传入文件:直接将File对象传入Scanner构造方法,Scanner会自动处理文件读取流。
  • 自动资源管理:try-with-resources语法会在代码块结束后自动关闭Scanner,无需手动调用close(),避免资源泄漏。
  • 异常处理:
    • FileNotFoundException:处理文件不存在或无读取权限的场景。
    • NumberFormatException:处理文件中存在非数字内容的行,防止程序崩溃。
  • 空行处理:通过trim()和isEmpty()跳过空行,避免解析空字符串报错。

内容的提问来源于stack exchange,提问作者Ausrys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 07:30:52