csv解析框架Windmill的一个demo

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

原文地址:https://www.cnblogs.com/passedbylove/p/11444562.html

时间: 2024-11-06 09:34:38

csv解析框架Windmill的一个demo的相关文章

002:python用flask框架开发第一个demo接口

从2020年开始,学习记录开始加入编号了~ 002:python用flask框架开发第一个demo接口 1.安装flask库,cmd命令进入到python37安装目录的scripts中pip3 install flask: 2.开始写代码 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import flask 4 import json 5 6 """flask 开发第一个demo接口"""

Android 打造编译时注解解析框架 这只是一个开始

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43452969 ,本文出自:[张鸿洋的博客] 1.概述 记得很久以前,写过几篇博客,容我列举一下: Android 进阶 教你打造 Android 中的 IOC 框架 [ViewInject] (上) Android 进阶 教你打造 Android 中的 IOC 框架 [ViewInject] (下) Android 框架炼成 教你如何写组件间通信框架EventBus 大家可以关

json解析框架

2.需要在App.java中继承WebMvcConfigurerAdapter重写方法:configureMessageConverters 添加我们自己定义的json解析框架; 2.1 @Bean注入第三方的json解析框架: @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { // 1.需要先定义一个 convert 转换消息的对象; FastJsonHttpMessageConverter fastCon

基于 java 注解的 csv 读写框架更加简单灵活

CSV 基于 java 注解的 csv 读写框架. 相关框架 Apache commons-csv super-csv 简单看了下,这两个框架提供的特性都非常的基础. 创作原由 以前觉得 csv 文件的读写非常简单,就懒得封装. 最近一个月写了两次 csv 文件相关的东西,发现要处理的细节还是有的,还浪费比较多的时间. 比如: UTF-8 中文编码使用 excel 打开乱码,因为缺少 BOM 头. 不同类型字段转化为字符串,顺序的指定,head 头的指定,如果手写都会很繁琐. 读取的时候最后 ,

Flask---使用Bootstrap新建第一个demo

Flask---使用Bootstrap新建第一个demo 参考自http://www.jianshu.com/p/417bcbad82fb 还有<Flask web开发> 前端用到Bootstrap开源框架,Bootstrap是客户端框架,后台当然就是Flask了. 服务器需要做的只是提供引用了Bootstrap层叠样式表(CSS)和JS文件的html响应,并且在html.css和js代码中实例化需要的组件,这些操作的最理想的执行环境就是模板 关于模板的介绍及其实现原理:https://kb.

Node.js 的第一个 demo 和本地服务器配置

安装nodejs这里就不叙述了,直接上nodejs官网下载就好了,初学者建议直接下载安装版,无需自己去编译.nodejs安装版和安装其他软件一样,无门槛. 安装nodejs后启动node.js,会打开一个类似黑色的系统命令框,这里是直接输入js代码的命令框,因此在这里输入 node -v 会提示你没有 node 这个命令,如: 如果你想安装其他的包,如 express 等,就需要在开始菜单里面找到 Node.js command prompt 或者 直接运行 cmd 进入命令行. 进入命令行后,

Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)

在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. 下面就来说说经常会使用到通知机制中的通知栏框架(Notificaiton),它适用于交互事件的通知.它是位于顶层可以展开的通知列表.它会时不时的提醒你什么软件该更新了,什么人发你微信消息了等. (网上看了下,全面介绍的文章不多,所以就萌生了写这篇的念头,随便当作回顾笔记.下面我就通过官方文档.源代码

Android 通知栏Notification的整合 全面学习 (一个DEMO让你全然了解它)

在android的应用层中.涉及到非常多应用框架.比如:Service框架,Activity管理机制,Broadcast机制.对话框框架.标题栏框架,状态栏框架.通知机制,ActionBar框架等等. 以下就来说说常常会使用到通知机制中的通知栏框架(Notificaiton).它适用于交互事件的通知.它是位于顶层能够展开的通知列表. 它会时不时的提醒你什么软件该更新了,什么人发你微信消息了等. (网上看了下,全面介绍的文章不多,所以就萌生了写这篇的念头.随便当作回想笔记. 以下我就通过官方文档.

spring security 安全框架remember me,demo学习

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/50018001未经博主允许不得转载. 博主地址是:http://blog.csdn.net/freewebsys 1,spring security Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的框架. 在安全框架这边使用最多的就是spring security. 论坛资料比较充实. 一个哥们写的例子,使