使用OpenCSV读取文件

时间:2014-12-23 21:33:48

标签: java csv export-to-excel opencsv

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

  

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

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:4)

检查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依赖项。

<强>更新

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

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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