关于java:使用OpenCSV读取文件

File reading using OpenCSV

我使用opencv读写csv文件。它运行良好,直到我的HSD安装早期版本的Java -即Java 6。安装后,我的代码停止工作:

Exception in thread"main" java.lang.UnsupportedClassVersionError:
com/opencsv/CSVReader : Unsupported major.minor version 51.0 at
java.lang.ClassLoader.defineClass1(Native Method) at
java.lang.ClassLoader.defineClassCond(Unknown Source) at
java.lang.ClassLoader.defineClass(Unknown Source) at
java.security.SecureClassLoader.defineClass(Unknown Source)

enter image description here

enter image description here


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

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

如果这显示一个版本比50更新(=比Java 6更新),那么您就不能使用这个jar。您需要得到一个用Java 6或更高版本构建的EDCOX1×0文件。(如果它可以用Java 6构建)。

我刚刚确认最新版本的源代码没有用Java 6编译,因为它使用Java 7特性(自然地)。但就在不久前,截至2014年8月,该项目仍在Java 5上。所以,如果您下载一个旧版本的jar,它应该可以工作。

换句话说,因为您降级了Java版本,您还需要降级OpenCSV依赖项。

更新

从SourceForge,版本2.3包含一个适合您的JAR文件:

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

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


我也看到了同样的问题。请让我知道OpenCsv的哪一个版本可以与Java版本"1.60Sy22"兼容?Opencsv 2.3不适合我。


当OpenCsv升级到3时,决定升级到Java 7。这样做有几个原因。最主要的原因是3的主要修复是支持在GRAILS(可能是Java 8)中的LAMBDAS中的懒惰检查,因此请求代码在Java 7中编译,因为它对于GRAIUS更为优化。我之所以允许这一点是因为Oracle已经宣布在2015中放弃Java 7的支持,Java 5和6长期以来一直是不支持的,而且我有少量的电子邮件询问我何时要将OpenCsv移植到Java 7(并且由于某种原因只有一个Java 8),所以我觉得移动到Java 7是安全的。最后一个是我使用Mac开发,不再有机会访问Java 5编译器,而且我真的感觉不好推出Java 5的OpenJSV版本,使用Java 7。

在事后看来,这引起的问题(你是我知道的第三,因为这个原因不能升级),我会把它留在Java 5,并要求GRAILS用户执行性能测试,我自己在我的Mac上的Ubuntu VM上构建OpenCsv。但因为它已经过时了,我不想降级,也可能影响用户。

如果你不能将你的项目升级到Java 7,那么你有两个选项:第一个是在SooCyFrand和Maven存储库上,你可以下载旧版本。因此,2.4和更早使用Java 5构建。另一种选择是您可以下载代码并自己构建它。由于KommradHomer,当前的代码库与Java 6兼容,并且将与Java 6编译器一样构建(您只需要更改POM文件)。