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
相关产品推荐
相关产品推荐

