csv文件内容如下,第一行是文件头
解析代码如下:
package com.xxx;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
@Data
public class CodecRegistries {
private String index;
private String name;
/**
* WAVE form Registration Number
*/
private Integer hex;
/***
* Codec ID in the IANA Namespace
*/
private String mimeType;
/***
* WAVE form wFormatTag ID
*/
private String wFormatTag;
/***
* WAVEFORMAT Use
*/
private String use;
/***
* WAVEFORMAT Name
*/
private String formatName;
/***
* WAVEFORMAT Description
*/
private String descr;
/***
* Additional Information
*/
private String additional;
/***
*
*/
private String contact;
@Override
public String toString() {
return new ToStringBuilder(this)
.append("index", index)
.append("name", name)
.append("hex", hex)
.append("mimeType", mimeType)
.append("wFormatTag", wFormatTag)
.append("use", use)
.append("formatName", formatName)
.append("descr", descr)
.append("additional", additional)
.append("contact", contact)
.toString();
}
}
static Map<Integer,CodecRegistries> codes = new HashMap<>();
static void readCodeRegistries(String fileName)
{
try (InputStream inputStream = new FileInputStream(fileName)) {
FileSource source = FileSource.of(inputStream);
CsvParserConfig config = CsvParserConfig.builder()
.charset(StandardCharsets.UTF_8)
.build();
Map<Integer, CodecRegistries> map = Windmill.parse(source, Parsers.csv(config)).skip(1).map(row -> {
CodecRegistries registration = new CodecRegistries();
registration.setIndex(row.cell(0).asString());
registration.setName(row.cell(1).asString());
//通过自定义数据转换代码,将16进制数0x0001这样的数值转换成Integer
Integer hex = new NumberValue<Integer>(row.cell(2).asString(), hexDecimal -> Integer.decode(hexDecimal)).value();
registration.setHex(hex);
registration.setMimeType(row.cell(3).asString());
registration.setWFormatTag(row.cell(4).asString());
registration.setUse(row.cell(5).asString());
registration.setFormatName(row.cell(6).asString());
registration.setDescr(row.cell(7).asString());
registration.setAdditional(row.cell(8).asString());
registration.setContact(row.cell(9).asString());
return registration;
}).collect(Collectors.toMap(CodecRegistries::getHex, Function.identity()));
codes.putAll(map);
}catch (IOException e){
System.err.println(e);
}
}