读取文件映射对象时触发java.lang.NumberFormatException求助
问题排查与解决方案
核心问题定位
java.lang.NumberFormatException: For input string: "N64" 明确指向代码尝试将字符串类型的平台标识"N64"强制转换为整数类型,属于字段类型不匹配导致的解析错误。
排查步骤
核对对象字段与CSV列的类型对应关系
检查FinalProjectRecord对象中,对应CSV里包含"N64"的列的字段类型。如果该字段被定义为int/Integer,但CSV列存储的是平台代号(字符串),必然触发转换异常。定位测试代码第34行的逻辑
查看FinalProjectTests.java第34行代码,确认该行是否在执行类似Integer.parseInt()的转换操作,且转换的目标值正是CSV中的"N64"字符串。检查CSV读取映射逻辑
如果使用第三方CSV解析库(如OpenCSV、Jackson CSV),检查字段注解或映射配置是否错误将字符串列绑定到整数字段;如果是自定义解析器,确认列索引对应的解析逻辑是否匹配字段类型。
修复方案
方案1:修正对象字段类型(推荐,符合数据语义)
如果"N64"这类值是平台的字符串标识,将FinalProjectRecord中对应字段的类型从int/Integer改为String:
// 原错误定义 private int platform; // 修正后 private String platform;
同时调整读取代码中的解析逻辑,直接赋值字符串而非转换:
// 原错误代码 record.setPlatform(Integer.parseInt(csvRow[platformColumnIndex])); // 修正后 record.setPlatform(csvRow[platformColumnIndex]);
方案2:添加数据映射逻辑(若需保留整数类型)
如果业务要求该字段必须为整数,需要为字符串平台标识映射对应的编码值,比如:
String platformStr = csvRow[platformColumnIndex]; int platformCode; switch(platformStr) { case "N64": platformCode = 1; break; // 其他平台映射规则 default: // 处理未知平台,可抛出自定义异常或设置默认值 platformCode = 0; } record.setPlatform(platformCode);
方案3:过滤/修复CSV数据
如果CSV数据存在错误(本该是整数却混入字符串),需要修正CSV文件中的对应列数据,或者在读取时跳过无效行。
内容的提问来源于stack exchange,提问作者Ish Higareda
相关产品推荐
相关产品推荐

