Android中用OpenCSV解析CSV时遇找不到java.beans.Introspector类问题
解决Android使用OpenCSV报错
Didn't find class "java.beans.Introspector"的问题 这个坑我之前踩过!你遇到的问题本质是:OpenCSV默认使用Java SE的java.beans.Introspector类来做JavaBean的内省映射,但Android SDK并不包含这个类,所以直接用默认的CsvToBeanBuilder就会抛出找不到类的错误。下面给你简单可行的解决方案:
方案:使用ColumnPositionMappingStrategy手动映射列与实体类字段
这是最直接的解决方案,完全避开内省机制,通过指定列顺序来绑定实体类字段,完美适配Android平台。
步骤1:确认你的实体类定义(示例)
data class csvDataClass( val name: String, val phone_one_value: String )
步骤2:修改解析代码,添加手动映射策略
// 创建并配置映射策略 val mappingStrategy = ColumnPositionMappingStrategy<csvDataClass>().apply { type = csvDataClass::class.java // 按CSV文件的列顺序,依次对应实体类的字段名 columnMapping = arrayOf("name", "phone_one_value") } // 使用映射策略构建解析器 val beans: List<csvDataClass> = CsvToBeanBuilder<csvDataClass>(FileReader(file)) .withMappingStrategy(mappingStrategy) .withSkipLines(1) // 如果CSV第一行是表头,记得加上这句跳过表头 .build() .parse() // 遍历解析后的数据(用forEach比传统for循环更简洁) beans.forEach { bean -> Log.d("Tag", "NAME = ${bean.name} Number = ${bean.phone_one_value}") }
额外注意事项
- 务必保证
columnMapping数组的顺序和CSV文件的列顺序完全一致 - 如果你的CSV没有表头,直接去掉
withSkipLines(1)即可 - 该方案适配所有Android版本,没有API等级限制
内容的提问来源于stack exchange,提问作者Pardeep Kumar
相关产品推荐
相关产品推荐

