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

