超级CSV(Java) - 读取列名称中包含空格的文件

时间:2010-06-29 13:02:42

标签: java csv supercsv

我正在使用Super CSV,它看起来像一个惊人的包。

我唯一担心的是如何使用名称中包含空格的列。不,我不能回去自己删除空格。这些文件将由数百个提供给我,我没有时间返回并修复每个文件的所有60列,我不能相信其他人正确地做到这一点。

如何使用标题中带空格的列(即“名字”而不是“FirstName”或“firstName”)?

谢谢!

有关编码样本,请查看此处:http://supercsv.sourceforge.net/codeExamples_general.html

4 个答案:

答案 0 :(得分:5)

您注意到链接到的示例中的这一行:

final String[] header = inFile.getCSVHeader(true);

这应该为您提供列名,不是吗?

http://supercsv.sourceforge.net/javadoc/index.html

我想我现在明白你的问题。传递给read函数的String []参数获取要读入的类的属性名称。它是位置的,因此它不必像标题那样命名。因此,例如,您可以拥有String[] header = inFile.getCSVHeader(),但之后会有headerName->propertyName的映射,因此,如果您的标题字段为:

First Name, Last Name, Age

但你的班级是

getFirstName(), setFirstName(...);
getLastName(), setLastName(...);
getYears(), setYears();

传递给read方法而不是(String[]) {"First Name", "Last Name", "Age"},因为标题是,但是传递给read(String[]) {"FirstName", "LastName", "Years"}数组。

答案 1 :(得分:2)

如果要使用不同的名称映射CSV标头,可以创建一个哈希映射并将其用于内部实现,例如:您可以使用“firstName”映射“First Name”,并根据您的内部名称填充您的bean ..

答案 2 :(得分:2)

使用带空格的标题分隔bean映射和标题数组。

private final String[] header = new String[] { "First Name", "Last Name"}; private final String[] dataMapping = new String[] { "firstName", "lastName"}; beanWriter = new CsvBeanWriter(new FileWriter(path), CsvPreference.EXCEL_PREFERENCE); beanWriter.writeHeader(header); beanWriter.write(yourPojo, dataMapping, processors);

答案 3 :(得分:1)

我意识到这是一个相当古老的帖子,但其他人可能正在寻找另一种简单的解决方案。这就是我所做的,以确保我只有alph数字标题名称,没有空格:

  final String[] header = beanReader.getHeader(true);

  for(int i = 0; i <= header.length -1 ; i++ ) {
    header[i] = header[i].replaceAll("[^a-zA-Z0-9]+","");
  }