解析文件
解析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");
}
网友评论