首页 文章

使用OpenCSV读取文件

提问于
浏览
2

我使用OpenCSV进行CSV文件的读写 . 它工作正常,直到我想安装早期版本的Java - 即Java 6.安装后,我的代码停止工作:

线程“main”中的异常java.lang.UnsupportedClassVersionError:com / opencsv / CSVReader:java.lang.ClassLoader.defineClassCond(Unknown Source)at java.lang.ClassLoader.defineClass1(Native Method)中不支持的major.minor版本51.0 java.security.SecureClassLoader.defineClass(未知来源)中的java.lang.ClassLoader.defineClass(未知来源)

enter image description here

enter image description here

3 回答

  • 0

    检查OpenCSV .jar 依赖项中的类文件版本,例如:

    javap -verbose -cp opencsv.jar com.opencsv.CSVReader | grep major
    

    如果这显示的版本高于50(=比Java 6更新),则无法使用此jar . 您需要获得使用Java 6或更早版本构建的 .jar 文件 . (如果它可以用Java 6构建 . )

    我刚刚确认源代码的最新版本不能用Java 6编译,因为它使用Java 7功能(当然) . 但是不久之前,截至2014年8月,该项目仍然在Java 5上 . 因此,如果您下载旧版本的jar,它应该可以工作 .

    换句话说,由于您降级了Java版本,因此还需要降级OpenCSV依赖项 .

    UPDATE

    SourceForge开始,版本2.3包含一个适合您的jar文件:

    $ javap -verbose -cp deploy/opencsv-2.3.jar au.com.bytecode.opencsv.CSVReader | grep major
      major version: 50
    

    请注意,程序包名称与当前版本略有不同 .

  • 0

    当OpenCSV升级到3.0时,决定升级到Java 7.这样做有几个原因 . 主要原因是最大的原因是3.0中的主要修复是支持Grails中的Lambdas(可能是Java 8)中的惰性检查,因此要求代码在Java 7中编译,因为它对Grails更为理想 . 我允许这样做是因为甲骨文宣布它在2015年放弃了对Java 7的支持,Java 5和6早已不受支持,而且我收到少量电子邮件,询问我何时将opencsv移植到java 7(并且只有一个用于java 8由于某种原因)所以我觉得转移到java 7是安全的 . 最后一个是我使用mac开发并且不再能够访问java 5编译器而且我真的不喜欢推出使用java 7构建的opencsv的Java 5版本 .

    事后看到这引起的问题(你知道的第三个因为这个问题无法升级)我会把它留在Java 5并要求Grails用户执行性能测试并自己在Ubuntu VM中构建opencsv在我的Mac上 . 但由于它已经出局,我不想降级并可能影响用户 .

    如果你不能将项目升级到java 7,你有两个选择:第一个是在sourceforge和maven存储库上你可以下载旧版本 . 所以2.4和更早版本是使用java 5构建的 . 另一个选择是你可以下载代码并自己构建它 . 感谢KommradHomer,当前的代码库与Java 6兼容,并且将使用Java 6编译器进行构建(您只需要更改pom文件) .

  • 4

    我看到了同样的问题 . 请告诉我哪个版本的openCSV可以与java版“1.6.0_22”兼容? OpenCSV 2.3对我不起作用 .

相关问题