Processing中使用loadStrings()无法读取StudentData.txt文件数据求助
Processing loadStrings读取文件异常问题排查及修复
1. 文件读取失败路径排查
loadStrings() 默认查找文件的路径为当前运行的.pde sketch文件同级目录下的data文件夹,你当前的目录结构存在放置错误的可能:
- 如果你的主程序.pde文件存放在
student或studentSearch子文件夹内,必须将data文件夹移动到对应.pde文件的同级目录下,比如主程序在student文件夹内,正确路径应为Processing/student/data/StudentData.txt - 可以在
setup()第一行添加println(sketchPath(""));打印当前sketch的工作目录,确认data/StudentData.txt的放置位置是否匹配 - 临时测试可以使用绝对路径读取文件,确认文件本身无损坏:Windows下格式为
loadStrings("C:/完整路径/StudentData.txt"),Mac/Linux下格式为loadStrings("/Users/完整路径/StudentData.txt")
2. 代码逻辑错误修复
即使文件读取成功,现有代码也会抛出空指针、数组越界异常,错误点如下:
- 无读取结果非空校验:
loadStrings()读取失败会返回null,直接调用fileData.length会触发空指针异常 - 学生数组元素未初始化:仅初始化了
Student[]数组,数组内每个元素为null,直接给studentList[i].studentName赋值会触发空指针异常 - 数组索引逻辑错误:每3行对应1个学生,第i个学生的三个属性对应的索引应为
i*3、i*3+1、i*3+2,现有写法会导致数据错位、数组越界
3. 修正后完整代码
主类代码
Student[] studentList; String[] fileData; void loadFileData(){ fileData = loadStrings("StudentData.txt"); // 读取失败校验 if(fileData == null){ println("StudentData.txt读取失败,请检查文件路径"); exit(); } // 数据格式校验 if(fileData.length % 3 != 0){ println("文件数据行数不合法,必须为3的倍数"); exit(); } } void setup(){ loadFileData(); int studentCount = fileData.length / 3; studentList = new Student[studentCount]; for(int i = 0; i < studentCount; i++){ String name = fileData[i*3]; String address = fileData[i*3 + 1]; int number = parseInt(fileData[i*3 + 2]); // 调用构造函数初始化学生对象 studentList[i] = new Student(name, address, number); } // 输出验证 printArray(fileData); println("=====学生信息读取结果====="); for(Student s : studentList){ println("姓名:"+s.studentName + " 地址:"+s.studentAddress + " 编号:"+s.studentNumber); } }
Student类代码(无需修改)
class Student{ String studentName; String studentAddress; int studentNumber; Student(String name, String address, int number){ studentName = name; studentAddress = address; studentNumber = number; } }
内容的提问来源于stack exchange,提问作者Dominik Danda
相关产品推荐
相关产品推荐

