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

统计文件行数触发InputMismatchException:问题排查与修复

解决Java统计文件行数时的InputMismatchException异常

嘿,我来帮你排查这个问题!你遇到的InputMismatchException本质是Scanner试图读取整数,但你的文件内容根本不是整数类型,这就导致了类型不匹配的异常。咱们一步步拆解问题和修复方案:

问题出在哪里?

从你的代码意图(统计文件行数)和变量/文件名(MovieList、TheMovieList.txt)来看,你的文件里应该是电影名称这类字符串内容,但你的代码逻辑完全偏离了目标:

  • 你用ms.nextInt()强行读取整数,文件里没有整数时,Scanner就会抛出InputMismatchException。
  • while(true)是无限循环,就算没有异常,程序也会一直运行下去,没有终止条件。
  • 代码里完全没有统计行数的逻辑,只是读整数然后打印空行,和你的需求不符。

修复方案

要统计文件行数,核心是遍历文件的每一行并计数,具体修复步骤:

  1. 初始化计数器变量,用来记录行数。
  2. 使用Scanner.hasNextLine()作为循环条件,判断是否还有下一行内容。
  3. 每次循环中用nextLine()读取一行(即使不需要处理内容,也要读取它来推进指针),同时计数器加1。
  4. 针对性捕获FileNotFoundException,处理文件不存在的情况,比直接throws Exception更友好。

修复后的代码

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

public class Main {
    public static void main(String[] args) {
        int lineCount = 0;
        File movieFile = new File("TheMovieList.txt");
        
        // 使用try-with-resources自动关闭Scanner,避免资源泄漏
        try (Scanner ms = new Scanner(movieFile)) { 
            while (ms.hasNextLine()) {
                ms.nextLine(); // 读取一行内容,推进Scanner指针
                lineCount++;
            }
            System.out.println("文件总行数:" + lineCount);
        } catch (FileNotFoundException e) {
            System.out.println("错误:找不到指定文件,请检查文件路径!");
            e.printStackTrace();
        }
    }
}

代码关键点说明

  • try-with-resources语法:不用手动关闭Scanner,JVM会自动处理,更安全规范。
  • ms.hasNextLine()循环条件:确保文件读完后自动终止循环,避免无限运行。
  • 针对性异常捕获:给用户清晰的错误提示,方便排查文件路径问题。

内容的提问来源于stack exchange,提问作者7amdi 3adel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:36:51