Apache Commons CSV使用指南

2017-01-05  本文已影响0人  飞扬小初

解析文件

解析Excel CSV文件

Reader in = new FileReader("path/to/file.csv");
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
    String lastName = record.get("Last Name");
    String firstName = record.get("First Name");
}

先通过文件路径获取到一个FileReader,然后读取CSV记录。默认自动带有Header信息.

设置读取文件的编码类型

Reader in = new InputStreamReader(new FileInputStream(path),"UTF-8");
Iterable<CSVRecord> records = CSVFormat.RFC4180.withFirstRecordAsHeader().parse(in);
for (CSVRecord record : records) {
    if (record.size() < 9){
        System.out.println("<9");
        continue;
    }
String columnOne = record.get(5);
Float columnTwo = Float.parseFloat(record.get(6));
result.put(columnOne,columnTwo);
}

可以通过设置InputStreamReader来配置以何种编码类型读取文件。

使用Headers头信息

Apache Commons CSV提供了好几种方式来访问CSV文件的内容,最简单的方式就是使用数据的索引序号来访问。一般CSV文件都会有一个header头信息,表明这个表的每一列的数值的内涵。

使用索引访问内容

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);
}

可以通过自定义Header来访问数据:

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");
}

甚至可以使用枚举类型类定义Header标签

public enum Headers {
    ID, CustomerNo, Name
}
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);
}

一般Header标签都是第一行,因此可以使用默认第一行为header的方式读取。

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

猜你喜欢

热点阅读