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

Java中Scanner读取本地TXT文件中途停止的问题求助

解决Scanner读取IMDB.txt时抛出NoSuchElementException的问题

你的代码在读取本地IMDB.txt文件到第24行时抛出java.util.NoSuchElementException,但其他设备能正常运行,核心原因大概率是文件换行符差异、编码不匹配或本地文件损坏,以下是针对性解决方法:

可能原因及解决方案

1. 文件换行符格式不兼容

Windows系统默认使用\r\n作为换行符,而Unix/Linux/macOS系统使用\n。如果你的IMDB.txt是在非Windows系统生成的,Scanner在Windows环境下可能无法正确识别部分换行标记,导致提前判定文件结束。

解决步骤:

  • 用记事本打开IMDB.txt,点击「文件」→「另存为」
  • 编码选择「UTF-8」,保存类型保持「文本文档(*.txt)」
  • 覆盖原文件后重新运行程序

2. Scanner未指定文件编码

不同系统默认文件编码不同(Windows为GBK,Linux/macOS为UTF-8),若文件实际是UTF-8编码,但Scanner使用系统默认编码读取,可能会将某些字节误判为文件结束符。

修改代码:
将Scanner初始化代码改为指定UTF-8编码:

Scanner archivo = new Scanner(new File("C:\\Users\\adxlm\\Downloads\\IMDB.txt"), "UTF-8");

3. 本地文件损坏或不完整

你的IMDB.txt可能在下载、复制过程中损坏,导致第24行之后的内容丢失,而同学的文件是完整的。

解决步骤:

  • 直接从同学处重新拷贝IMDB.txt文件,覆盖本地版本后测试

额外优化:避免异常的健壮写法

为了防止类似异常,建议添加文件合法性检查,并改为循环读取直到文件结束(而非固定循环100次):

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

public class Rankings {
    
    public static void main(String[] args) throws FileNotFoundException {
        Scanner input = new Scanner(System.in);
        File imdbFile = new File("C:\\Users\\adxlm\\Downloads\\IMDB.txt");
        
        // 检查文件是否存在且可读
        if (!imdbFile.exists() || !imdbFile.canRead()) {
            System.out.println("文件不存在或无法读取");
            input.close();
            return;
        }
        
        Scanner archivo = new Scanner(imdbFile, "UTF-8");
        System.out.print("Enter the quantity of rankings: ");
        // int nrorankings = input.nextInt();
        
        int lineCount = 0;
        // 循环读取最多100行,或直到文件结束
        while (archivo.hasNextLine() && lineCount < 100) {
            System.out.println(archivo.nextLine());
            lineCount++;
        }
        
        // 关闭资源
        archivo.close();
        input.close();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:40:33