当前位置: 首页 > 知识库问答 >
问题:

在使用OpenCSV解析csv文件时找不到类“java.beans.Introspector”

胡星汉
2023-03-14

我正在使用OpenCsv为我的Android应用程序解析.csv文件。我用 kotlin 编写代码。这是我的代码:

我是这样解析csv文件的:

val beans: List<csvDataClass> = CsvToBeanBuilder<csvDataClass>(FileReader(file))
            .withType(csvDataClass::class.java).build().parse()

    for (i:Int in 0..beans.size-1) {
        Log.d("Tag", " NAME = ${beans.get(i).name} Number = ${beans.get(i).phone_one_value}")
    }

这是我要将csv数据转换为的对象类。

class csvDataClass {
@CsvBindByName (column = "Name")
var name:String = ""
@CsvBindByName (column = "Phone 1 - Value")
var phone_one_value:Int = 0

constructor() {}
constructor(name: String, phone_one_value: Int) {
    this.name = name
    this.phone_one_value = phone_one_value
}

}

我已经在build.gradle文件中添加了这一行:

implementation 'com.opencsv:opencsv:4.1'

这是我的csv文件内容:

Name,Phone 1 - Value

G T,11111 11111 H K,2222222222 KK,33333 33333 P K,44444 44444

但是当我运行代码时,我得到:

05-04 16:13:31.821 25829-25829/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.pk.opencsvpoc, PID: 25829
java.lang.NoClassDefFoundError: Failed resolution of: Ljava/beans/Introspector;
    at com.opencsv.bean.HeaderColumnNameMappingStrategy.loadDescriptors(HeaderColumnNameMappingStrategy.java:372)
    at com.opencsv.bean.HeaderColumnNameMappingStrategy.loadDescriptorMap(HeaderColumnNameMappingStrategy.java:284)
    at com.opencsv.bean.HeaderColumnNameMappingStrategy.setType(HeaderColumnNameMappingStrategy.java:415)
    at com.opencsv.bean.opencsvUtils.determineMappingStrategy(opencsvUtils.java:83)
    at com.opencsv.bean.CsvToBeanBuilder.build(CsvToBeanBuilder.java:156)
    at com.example.pardeepkumar.opencsvpoc.MainActivity.readCsvFile(MainActivity.kt:46)
    at com.example.pardeepkumar.opencsvpoc.MainActivity.onCreate(MainActivity.kt:38)
    at android.app.Activity.performCreate(Activity.java:6726)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727)
    at android.app.ActivityThread.-wrap12(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6121)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "java.beans.Introspector" on path: DexPathList[[zip file "/data/app/com.example.pk.opencsvpoc-1/base.apk", zip file "/data/app/com.example.pk.opencsvpoc-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.example.pk.opencsvpoc-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.example.pk.opencsvpoc-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.example.pk.opencsvpoc-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.example.pk.opencsvpoc-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.example.pk.opencsvpoc-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.example.pk.opencsvpoc-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.example.pk.opencsvpoc-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.example.pk.opencsvpoc-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.example.pk.opencsvpoc-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.example.pk.opencsvpoc-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.example.pk.opencsvpoc-1/lib/arm64, /system/lib64, /vendor/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at com.opencsv.bean.HeaderColumnNameMappingStrategy.loadDescriptors(HeaderColumnNameMappingStrategy.java:372) 
    at com.opencsv.bean.HeaderColumnNameMappingStrategy.loadDescriptorMap(HeaderColumnNameMappingStrategy.java:284) 
    at com.opencsv.bean.HeaderColumnNameMappingStrategy.setType(HeaderColumnNameMappingStrategy.java:415) 
    at com.opencsv.bean.opencsvUtils.determineMappingStrategy(opencsvUtils.java:83) 
    at com.opencsv.bean.CsvToBeanBuilder.build(CsvToBeanBuilder.java:156) 
    at com.example.pardeepkumar.opencsvpoc.MainActivity.readCsvFile(MainActivity.kt:46) 
    at com.example.pardeepkumar.opencsvpoc.MainActivity.onCreate(MainActivity.kt:38) 
    at android.app.Activity.performCreate(Activity.java:6726) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727) 
    at android.app.ActivityThread.-wrap12(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6121) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 

共有1个答案

澹台鸿熙
2023-03-14

Android上的Bean处理需要一个外部库:openbeans。

然而,我不确定如果你把这个库添加到你的类路径中,OpenCSV是否会起作用,因为OpenBeans中的Introspector等类的包名称与原始JDK包不匹配。

你也可以试试我的库:univocity-parsers,它可以在Android上用OpenBeans生成你的类的实例。

这样使用:

CsvRoutines routines = new CsvRoutines();

for (csvDataClass bean : routines.iterate(csvDataClass.class, file)) {
        System.out.println(bean);
}

希望这有帮助。

 类似资料:
  • 我有一个CSV文件,我想用开放CSV的csv阅读器在Java中解析。 为此,我创建了一个Bean对象,信息映射到该对象。我的有点长,所以这是我从教程中得到的一个例子: 我用来解析CSV文件并将信息映射到bean的代码类似于以下代码: 问题在于,我的CSV不仅包含原始数据,还包含列标题和其他数据。对于专栏标题,我只从某行读取我的文件,解决了这个问题: (1 是开始读取的行) 其他数据主要是文件末尾(

  • 问题内容: 我正在尝试在NetBeans 6.0.1中使用OpenCSV解析.csv文件。我的文件包含一些Unicode字符。当我在输出中写入字符时,字符以其他形式显示,例如(HJ1’-E /;)。当我在记事本中打开此文件时,它看起来还可以。 我使用的代码: 问题答案: 首先,您需要知道文件的编码格式,例如UTF-8或UTF-16。生成此文件的原因是什么? 在那之后,它相对简单- 您需要创建一个包

  • 我正在尝试使用OpenCsv从CSV解析即时,如下所示: 我知道OpenCsv应该支持< code>java.time。 但是当我试图使用它的时候,我得到了下面的异常: 分析CSV行时出错:8。 ... 原因:java.time.format。DateTimeParseException:无法解析文本“2022-04-21 00:00:00”:无法从临时加速器获取即时数据:{HourOfAmPm=

  • 我想使用OpenCSV库将CSV文件导入到JTable中。网上找到的所有例子都与命令行显示有关,这里找到的唯一代码不起作用,因为JTable需要Object[][]和String[]: 来源:将csv导入JTable 有没有办法用这个库把这些文件显示在一个表格里?

  • 问题内容: 使用nodejs,我想解析一个包含10000条记录的.csv文件,并对每一行进行一些操作。我尝试使用http://www.adaltas.com/projects/node- csv 。我无法让它在每一行暂停。这只会读取所有10000条记录。我需要执行以下操作: 逐行读取csv 在每条线上执行耗时的操作 转到下一行 有人可以在这里提出其他建议吗? 问题答案: 好像您需要使用一些基于流的

  • 使用nodejs,我想解析一个包含10000条记录的.csv文件,并对每一行执行一些操作。我尝试使用http://www.adaltas.com/projects/node-csv。我不能让它每排都停下来。这只是读取所有的10000个记录。我需要做到以下几点: 逐行读取csv 对每行执行耗时操作 转到下一行