Commons CSV 使用标题

CSV
Apache Commons CSV 提供了多种访问记录值的方法。最简单的方法是通过记录中的索引访问值。但是,CSV 文件中的列通常有一个名称,例如:ID、CustomerNo、Birthday等。

Apache Commons CSV 提供了多种访问记录值的方法。最简单的方法是通过记录中的索引访问值。但是,CSV 文件中的列通常有一个名称,例如:ID、CustomerNo、Birthday等。CSVFormat 类提供了用于指定这些标头名称的 API,而另一方面 CSVRecord 具有通过相应标头名称访问值的方法。

按索引访问列值

要按索引访问记录值,不需要对 CSVFormat 进行特殊配置:

Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.RFC4180.parse(in);
for (CSVRecord record : records) {
    String columnOne = record.get(0);
    String columnTwo = record.get(1);
}

手动定义标题

索引可能不是访问记录值的最直观方式。因此,可以为文件中的每一列分配名称:

Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.RFC4180.withHeader("ID", "CustomerNo", "Name").parse(in);
for (CSVRecord record : records) {
    String id = record.get("ID");
    String customerNo = record.get("CustomerNo");
    String name = record.get("Name");
}

请注意,仍然可以使用它们的索引访问列值。

使用枚举定义标题

在整个代码中使用字符串值来引用列可能容易出错。出于这个原因,可以定义一个枚举来指定标题名称。请注意,枚举常量名称用于访问列值。这可能会导致枚举常量名称不遵循 Java 编码标准,即定义大写带下划线的常量:

(1)定义 Headers 枚举类

public enum Headers {
    ID, CustomerNo, Name
}

(2)使用枚举定义标题

Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.RFC4180.withHeader(Headers.class).parse(in);
for (CSVRecord record : records) {
    String id = record.get(Headers.ID);
    String customerNo = record.get(Headers.CustomerNo);
    String name = record.get(Headers.Name);
}

同样可以通过索引和使用字符串(例如 “CustomerNo”)访问值。

标题自动检测

某些 CSV 文件在其第一条记录中定义标题名称。如果配置,Apache Commons CSV 可以从第一条记录解析标题名称:

Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in);
for (CSVRecord record : records) {
    String id = record.get("ID");
    String customerNo = record.get("CustomerNo");
    String name = record.get("Name");
}

这将使用第一条记录中的值作为标题名称,并在迭代时跳过第一条记录。

使用标题打印

要打印带有标题的 CSV 文件,请按以下格式指定标题:

final Appendable out = ...;
final CSVPrinter printer = CSVFormat.DEFAULT.withHeader("H1", "H2").print(out);

要打印带有 JDBC 列标签的 CSV 文件,请按以下格式指定 ResultSet:

final ResultSet resultSet = ...;
final CSVPrinter printer = CSVFormat.DEFAULT.withHeader(resultSet).print(out);
尺有所短;寸有所长。物有所不足;智有所不明。——屈原《卜居》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号