Flutter Dart中CSV文件抛出FormatException问题求助
Flutter Dart 处理CSV时 FormatException 排查方案
核心问题分析
你遇到的FormatException大概率是CSV解析时类型转换失败(比如把非纯数字内容转int),或是行数据字段数量不匹配;再结合“时好时坏”的现象,说明数据里可能存在隐藏异常(比如空行、不可见字符、字段前后空格)。
具体排查步骤
给解析逻辑加异常捕获,定位问题行
在转换int的代码段添加try-catch,打印出错的行内容,直接锁定问题数据:// 示例代码,根据你的实际字段索引调整 try { int num1 = int.parse(row[0].trim()); int num2 = int.parse(row[1].trim()); int num3 = int.parse(row[2].trim()); } catch (e) { print('转换失败的行数据:$row,错误详情:$e'); }清理CSV数据的潜在异常
- 跳过CSV里的空行(包括文件末尾的空行):
if (row.isEmpty || row.every((e) => e.trim().isEmpty)) continue; - 转换int前先去除字段前后的空格/不可见字符:
int num1 = int.parse(row[0].trim()); - 校验每行字段数量是否严格为7个(3个int+4个string):
if (row.length != 7) { print('字段数量不匹配的行:$row'); continue; }
- 跳过CSV里的空行(包括文件末尾的空行):
确认CSV解析的基础配置
确保解析用的分隔符和CSV实际一致(比如逗号/制表符),如果用csv第三方库,初始化时明确指定:final csvCodec = CsvCodec(fieldDelimiter: ','); // 根据你的CSV实际分隔符调整同时检查CSV文件编码是否为UTF-8,避免乱码导致解析异常。
用固定数据验证逻辑稳定性
手动构造一行标准测试数据(比如1,2,3,test1,test2,test3,test4)替换CSV内容,若能稳定运行,说明原CSV数据存在异常;若仍时好时坏,排查文件读取的异步问题(比如文件未完全加载就开始解析)。
内容的提问来源于stack exchange,提问作者zin203
相关产品推荐
相关产品推荐

