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

Java读取文本文件转ArrayList时出现空指针异常求助

空指针异常排查与修复

核心问题1:静态集合未初始化

你的AccessibilityResults类中,list是静态成员,但仅在构造函数中初始化。而调用的readTxtFile是静态方法,执行过程中从未创建AccessibilityResults实例,导致list始终为null,执行list.add()时触发空指针异常。

修复方案:
直接在静态成员声明时完成初始化,避免依赖构造函数:

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

public class AccessibilityResults {
    // 直接初始化静态集合
    private static ArrayList<AccessibilityTest> list = new ArrayList<>();

    public AccessibilityResults() {
        // 构造函数无需再初始化静态集合
    }

    public static void readTxtFile(String fileName){
        try(Scanner reader = new Scanner(new File(fileName))){
            while(reader.hasNextLine()){
                String cat = reader.next();
                String err1 = reader.next();
                String err2 = reader.next();
                String err3 = reader.next();
                String err4 = reader.next();
                // 处理next()后的换行残留
                reader.nextLine();
                String desc = reader.nextLine();
                list.add(new AccessibilityTest(cat, err1, err2, err3, err4,desc));
            }
        } catch(FileNotFoundException e){
            System.out.println("File not found: " + fileName);
        }
    }
}

核心问题2:Scanner读取逻辑冲突

reader.next()仅读取到空格/换行前的内容,5次next()执行后,当前行的剩余换行符仍在缓冲区,此时调用reader.nextLine()会直接读取空内容,而非目标描述。

更可靠的修复方案:读取整行后拆分,适配描述含空格的场景:

public static void readTxtFile(String fileName){
    try(Scanner reader = new Scanner(new File(fileName))){
        while(reader.hasNextLine()){
            String line = reader.nextLine();
            // 按空格拆分,保留最后一段的完整描述
            String[] parts = line.split(" ", 6);
            if(parts.length == 6){
                list.add(new AccessibilityTest(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5]));
            } else {
                System.out.println("Invalid line format: " + line);
            }
        }
    } catch(FileNotFoundException e){
        System.out.println("File not found: " + fileName);
    }
}

额外注意:文件路径验证

若提示文件未找到,确认a11yCheckersResults.txt放置在项目根目录(IDE中为项目文件夹根目录,非src目录),或使用绝对路径测试:

AccessibilityResults.readTxtFile("C:/your-project-root/a11yCheckersResults.txt");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:30:52