返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现CSV格式转对象
  • 365
分享到

Java实现CSV格式转对象

2024-04-02 19:04:59 365人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录介紹参考代码测试用例介紹 csv全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件。CS

介紹

csv全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串

我找了找目前百度上基本是没有这方面的快捷转换方式和工具包,能找到的基本都不能通用写死的,没办法只能自己写一份出来,主要用到的技术,反射,泛型,类型转换,构造者设计模式 ,以下代码给提供一个思路,技术差不多的话基本上看了下面的代码是能自己写出来的,如果是入门级别的Java程序员就自行跳过本博客

参考代码

部分工具类的代码没有展示, 这里就粘贴主要核心原理,很简单,自己也是能编写出来的

package com.file.csv;

import com.obj.converter.Converter;
import com.reflect.ReflectUtil;
import com.string.PatternCommon;
import lombok.SneakyThrows;
import org.springframework.core.ParameterizedTypeReference;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;


public class CSVToObj<T> extends ParameterizedTypeReference<T> {
    private String separator  ;  //默认分隔符
    private List<String> objects ;//数据
    private List<T> list=new ArrayList<>();//数据
    private Map<String,String> fieldsTypes = new LinkedHashMap<>();
    public CSVToObj(List<String> objects,String separator) {
        //特殊符号的处理
        this.separator = PatternCommon.division(separator);
        this.objects=objects;
    }
    //列,映射,转换的时候会和映射的顺序保持一致 ,默认使用当前文件的分隔符作为切割
    public CSVToObj<T>  mapping(String fieldNames){
        String[] split = fieldNames.split(separator);
        Class<? extends CSVToObj> aClass = ReflectUtil.deSerializable(getClass(),0);
        Field[] declaredFields = aClass.getDeclaredFields();
        for (String s : split) {
            for (Field declaredField : declaredFields) {
                declaredField.setAccessible(true);
                if(s.equals(declaredField.getName())){
                    fieldsTypes.put(declaredField.getName(), declaredField.getType().getTypeName());
                }
            }
        }
        return this;
    }

    @SneakyThrows
    public CSVToObj<T>  transfORM(){
        Class<? extends CSVToObj> aClass = ReflectUtil.deSerializable(getClass(),0);
        for (String object : objects) {
            String[] split = object.split(separator);
            T o = (T)aClass.newInstance();
            Field[] declaredFields = o.getClass().getDeclaredFields();
            for (int i = 0; i < declaredFields.length; i++) {
                Field declaredField = declaredFields[i];
                declaredField.setAccessible(true);
                if (fieldsTypes.containsKey(declaredField.getName())) {
                    declaredField.set(o, Converter.cast(split[i],fieldsTypes.get(declaredField.getName())));
                }
            }
            list.add(o);
        }
        return this;
    }
    public List<T>  result(){
        return list;
    }


}

测试用例

package com.file;

import com.entity.UserData;
import com.file.csv.CSVToObj;
import com.file.csv.ReadAndWriteFileCSV;
import com.path.ResourceFileUtil;
import org.junit.Test;

import java.io.File;
import java.util.List;


public class CSVToObjTest {

    @Test
    public void show1(){
        File absoluteFileOrDirPathAndCreateNewFile = ResourceFileUtil.getAbsoluteFileOrDirPathAndCreateNewFile("/file/text.csv");
        //读取头部对应字段
        String head = ReadAndWriteFileCSV.readFirstLineOne(absoluteFileOrDirPathAndCreateNewFile);
        //去掉头部和尾部的多余信息,只显示内容
        List<String> list = ReadAndWriteFileCSV.readSkipHeadAndEnd(absoluteFileOrDirPathAndCreateNewFile);
        //做映射,然后转换csv格式为实体对象
        List<UserData> result = new CSVToObj<UserData>(list, "|"){}.mapping(head).transform().result();
        for (UserData userData : result) {
            System.out.println(userData);
        }
    }
    @Test
    public void show2(){
        File absoluteFileOrDirPathAndCreateNewFile = ResourceFileUtil.getAbsoluteFileOrDirPathAndCreateNewFile("/file/text.csv");
        //手动指定文件头部
        String head ="id|name|pass|age|sex|site";
        //去掉头部和尾部的多余信息,只显示内容
        List<String> list = ReadAndWriteFileCSV.readSkipHeadAndEnd(absoluteFileOrDirPathAndCreateNewFile);
        List<UserData> result = new CSVToObj<UserData>(list, "|"){}.mapping(head).transform().result();
        for (UserData userData : result) {
            System.out.println(userData);
        }
    }

    //
}

以上就是Java实现CSV格式转对象的详细内容,更多关于Java CSV转对象的资料请关注编程网其它相关文章!

--结束END--

本文标题: Java实现CSV格式转对象

本文链接: https://lsjlt.com/news/151971.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java实现对象转CSV格式
    目录介绍代码样例测试样例介绍 csv全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件。CS...
    99+
    2024-04-02
  • Java实现CSV格式转对象
    目录介紹参考代码测试用例介紹 csv全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件。CS...
    99+
    2024-04-02
  • java string转map对象怎么实现
    要将Java中的String转换为Map对象,可以通过以下步骤实现: 为了将String转换为Map,首先需要将String解析...
    99+
    2023-10-28
    java
  • java object对象转数组怎么实现
    在Java中,可以使用反射来实现将对象转换为数组。首先,通过使用 getClass() 方法获取对象的类信息,然后使用 getDec...
    99+
    2023-10-18
    java
  • Python怎么将csv格式转换成JSON格式文件
    这篇文章主要介绍“Python怎么将csv格式转换成JSON格式文件”,在日常操作中,相信很多人在Python怎么将csv格式转换成JSON格式文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎...
    99+
    2023-06-02
  • java链式创建json对象的实现
    目录1、假设我们要创建一个json对象格式如下:2、往常创建JSON语法:3、解决方案——链式创建JSON:4、实现多级JSON5、YtJSONObject类...
    99+
    2024-04-02
  • Java状态设计模式实现对象状态转换的优雅方式
    目录介绍实现总结优点缺点应用场景介绍 Java状态模式(State Pattern)是一种面向对象的设计模式,它将对象的状态封装成独立的状态对象,并将对象的行为与状态对象解耦,它允许...
    99+
    2023-05-17
    Java状态设计模式 状态模式实现对象状态转换
  • SpringBoot自定义对象参数实现自动类型转换与格式化
    目录序章一、实体类 Bean二、前端表单index.html三、Controller 类四、运行结果截图序章 问题提出一: 当我们用表单获取一个 Person 对象的所有属性值时, ...
    99+
    2024-04-02
  • java对象与json对象之间互相转换实现方法示例
    本文实例讲述了java对象与json对象之间互相转换实现方法。分享给大家供大家参考,具体如下:import java.util.ArrayList;import java.util.Collection;import java.util.I...
    99+
    2023-05-30
    java json ava
  • Java对象和Json文本怎么实现转换
    这篇文章主要介绍“Java对象和Json文本怎么实现转换”,在日常操作中,相信很多人在Java对象和Json文本怎么实现转换问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java对象和Json文本怎么实现转换...
    99+
    2023-06-29
  • Java实现bmp和jpeg图片格式互转
    目录Bmp转JpegJpeg转BmpBmp转Jpeg public static String bmp2Jpeg(String filePath, String outPath) {...
    99+
    2023-05-15
    Java bmp和jpeg互转 Java bmp jpeg
  • Java将RTF转换为PDF格式的实现
    目录Jar包引入完整代码RTF文件的出色之处在于它的灵活性。RTF文件的性质使其非常适合那些使用不同软件进行工作的人。当然,这并不意味着文件应该永远保存为RTF文件。 有时我们希望将...
    99+
    2024-04-02
  • java 声明对象(转)
    java 声明对象(转)[@more@]正如刚才讲过的,当你创建一个类时,你创建了一种新的数据类型。你可以使用这种类型来声明该种类型的对象。然而,要获得一个类的对象需要两步。第一步,你必须声明该类类型的一个变量,这个变量没有定义一个对象。实...
    99+
    2023-06-03
  • Python实现RLE格式与PNG格式互转
    目录介绍1.PNG2RLE2.RLE2PNG3.示例4.完整代码如下介绍 在机器视觉领域的深度学习中,每个数据集都有一份标注好的数据用于训练神经网络。 为了节省空间,很多数据集的标注...
    99+
    2024-04-02
  • Python如何实现xml格式转txt格式
    本篇内容介绍了“Python如何实现xml格式转txt格式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、前言最近学习Yolo v5是遇见...
    99+
    2023-06-29
  • Java List对象集合转Json & Json转List对象集合
    使用了阿里巴巴的 fastjson 首先引入依赖 com.alibaba fastjson 2.0.32 示例如下 import com.alibaba.fastjson.JSONObject;import com.ex...
    99+
    2023-09-08
    java json
  • Java如何实现将PDF转为图片格式
    本文小编为大家详细介绍“Java如何实现将PDF转为图片格式”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java如何实现将PDF转为图片格式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。代码编译环境Intel...
    99+
    2023-07-05
  • C#实现OFD格式与PDF格式的互转
    目录OFD转为PDF1.按照如下步骤引入Spire.Pdf.dll2.代码示例PDF转为OFD示例代码OFD转为PDF OFD格式的文档是一种我国独有的国家标准版式的文档,在不同场景...
    99+
    2024-04-02
  • Java中的List<T>对象与Json格式的字符串的相互转换
    Java中的List对象与Json格式的字符串的相互转换 前提条件:引入JSON依赖,是由ali提供的一个fastjson com.alibaba fastjson 2.0.16 ...
    99+
    2023-09-05
    java json spring 数据库
  • JAVA 对象转换为JSON
    转载:如何把java对象转换为json java对象怎么转成json_clghxq的技术博客_51CTO博客 Java对象列表转换为JSON对象数组,并转为字符串 JSONArray jsonArray = JSONArray.fromOb...
    99+
    2023-09-06
    java json 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作