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

Java使用Scanner读取文件时出现NoSuchElementException问题求助

问题分析与解决方案

可能的原因及对应解决方法

1. 文件编码不匹配

Scanner默认采用平台默认编码读取文件,若你的.txt文件使用了其他编码(如UTF-16、GBK等非平台默认编码),会导致Scanner无法正确解析文件内容,误判为无行可读。

解决方法:创建Scanner时指定文件编码,比如文件是UTF-8编码:

Scanner myReader = new Scanner(myObj, "UTF-8");

若是UTF-16编码:

Scanner myReader = new Scanner(myObj, "UTF-16");

2. 文件内容格式异常

文件虽为制表符分隔,但如果换行符不是Scanner默认识别的格式(比如仅用\r而非\n或\r\n),或是文件开头存在BOM头这类不可见特殊字符,会导致Scanner无法正确识别行边界。

解决方法:

  • 检查并统一文件换行符为\n或\r\n;
  • 若为UTF-8 BOM头问题,可改用BufferedReader读取:
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(myObj), "UTF-8"));
String header = reader.readLine();

3. Scanner分隔符干扰

Scanner默认分隔符包含空白字符(制表符、空格、换行等),虽hasNextLine()按行判断,但极端情况下文件内容全被识别为分隔符,也会出现误判。可尝试明确设置行分隔符:

myReader.useDelimiter(System.lineSeparator());

4. 文件权限不足

即便文件路径正确且非空,当前运行Java程序的用户可能没有该文件的读取权限,导致Scanner无法读取内容。

解决方法:检查文件读取权限,确保运行程序的用户拥有读取该文件的权限。

验证代码建议

先用极简代码读取文件,排除复杂逻辑干扰:

import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;

public class TestReadFile {
    public static void main(String[] args) {
        try {
            File file = new File("C:\\Daten\\workspaces\\my_file.txt");
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

若这段代码能正常输出内容,说明问题出在原代码的Scanner使用上;若仍无法读取,则大概率是编码或权限问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:10:30