Java POJO to/from CSV,使用字段名作为列标题
Java POJO to/from CSV, using field names as column titles
我正在寻找一个 Java 库,它可以 read/write “简单 object 列表” from/to CSV 文件。
让我们定义一个“简单的object”作为一个POJO,它的所有字段都是原始的types/strings。
object 的字段和 CSV 列之间的匹配必须根据字段的名称和标题 列的(第一行)- 两者必须相同。图书馆不应该要求额外的匹配信息!如果您只是希望 CSV 标题与字段名称相匹配,那么这种额外的匹配信息是可怕的代码重复(相对于 POJO class 的定义)。
最后一个功能是我在我查看的所有库中都找不到的:OpenCSV、Super CSV 和 BeanIO。
谢谢!!
提供
uniVocity-parsers 不要求您在 class 中提供字段名称,但如果您需要确定不同的名称,甚至需要执行数据操作,它会使用注释。它也比您尝试过的其他库快得多:
class TestBean {
@NullString(nulls = { "?", "-" }) // if the value parsed in the quantity column is "?" or "-", it will be replaced by null.
@Parsed(defaultNullRead = "0") // if a value resolves to null, it will be converted to the String "0".
private Integer quantity; // The attribute name will be matched against the column header in the file automatically.
@Trim
@LowerCase
@Parsed
private String comments;
...
}
解析:
BeanListProcessor<TestBean> rowProcessor = new BeanListProcessor<TestBean>(TestBean.class);
CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.setRowProcessor(rowProcessor);
parserSettings.setHeaderExtractionEnabled(true);
CsvParser parser = new CsvParser(parserSettings);
//And parse!
//this submits all rows parsed from the input to the BeanListProcessor
parser.parse(new FileReader(new File("/examples/bean_test.csv")));
List<TestBean> beans = rowProcessor.getBeans();
披露:我是这个图书馆的作者。它是开源且免费的(Apache V2.0 许可证)。
我正在寻找一个 Java 库,它可以 read/write “简单 object 列表” from/to CSV 文件。
让我们定义一个“简单的object”作为一个POJO,它的所有字段都是原始的types/strings。
object 的字段和 CSV 列之间的匹配必须根据字段的名称和标题 列的(第一行)- 两者必须相同。图书馆不应该要求额外的匹配信息!如果您只是希望 CSV 标题与字段名称相匹配,那么这种额外的匹配信息是可怕的代码重复(相对于 POJO class 的定义)。
最后一个功能是我在我查看的所有库中都找不到的:OpenCSV、Super CSV 和 BeanIO。
谢谢!!
提供
uniVocity-parsers 不要求您在 class 中提供字段名称,但如果您需要确定不同的名称,甚至需要执行数据操作,它会使用注释。它也比您尝试过的其他库快得多:
class TestBean {
@NullString(nulls = { "?", "-" }) // if the value parsed in the quantity column is "?" or "-", it will be replaced by null.
@Parsed(defaultNullRead = "0") // if a value resolves to null, it will be converted to the String "0".
private Integer quantity; // The attribute name will be matched against the column header in the file automatically.
@Trim
@LowerCase
@Parsed
private String comments;
...
}
解析:
BeanListProcessor<TestBean> rowProcessor = new BeanListProcessor<TestBean>(TestBean.class);
CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.setRowProcessor(rowProcessor);
parserSettings.setHeaderExtractionEnabled(true);
CsvParser parser = new CsvParser(parserSettings);
//And parse!
//this submits all rows parsed from the input to the BeanListProcessor
parser.parse(new FileReader(new File("/examples/bean_test.csv")));
List<TestBean> beans = rowProcessor.getBeans();
披露:我是这个图书馆的作者。它是开源且免费的(Apache V2.0 许可证)。