csv文件内容如下,第一行是文件头
解析代码如下:
package com.netmarch; 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); } }