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

Java实现对象转CSV格式

2024-04-02 19:04:59 788人浏览 独家记忆

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

摘要

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

介绍

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

Java对象转CSV,有现成的工具包,commons-lang3 的ReflectionToStringBuilder 就可以简单的解决的对象转CSV 但是复杂点的处理还是不行,而且在运行速度上,我测试了下我自己写的,比这个快多了,1百万条数据大约也就2秒左右, 如果对速度有要求的话,我们可以使用多线程进行分割,比如1千万条数据,那么我开10个线程,1个线程执行100万条数据,所有线程执行完毕后在按照顺序拼接到一起,这样1千万条数据也就最多3~5秒执行完毕

代码样例

package com.file.csv;

import com.date.LocalDateUtils;
import lombok.Data;
import lombok.SneakyThrows;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;


@Data
public class ObjToCSV<T> {

    private String separator = "\u0001|\u0001";  //默认分隔符
    private StringBuilder str = new StringBuilder();
    private T object;
    private List<T> objects;
    private List<String> excludeFields = new ArrayList<String>(100) {{
        add("serialVersionUID");
    }};
    private List<String> includeFields = new ArrayList<String>(100);
    private boolean fieldsAll = false;
    private  int number;//多少行一共
    //日期串 20220617204504
    private  String createDate=LocalDateUtils.getLocalDateTimeStr1() ;

    private ObjToCSV(T object, String separator) {
        this.object = object;
        this.separator = separator;
        //行数
        this.number=1;
    }
    private ObjToCSV(T object) {
        this.object = object;
        //行数
        this.number=1;

    }
    private ObjToCSV(List<T> objects) {
        if (objects.isEmpty()) {
            throw new NullPointerException("不能是空");
        }
        this.object = objects.get(0);
        this.objects = objects;
        //行数
        this.number=objects.size();
    }
    private ObjToCSV(List<T> objects, String separator) {
        if (objects.isEmpty()) {
            throw new NullPointerException("不能是空");
        }
        this.object = objects.get(0);
        this.objects = objects;
        this.separator = separator;
        //行数
        this.number=objects.size();

    }


    // 排除和包含都有,那么以包含的为主
    private boolean decideFields(String fieldName) {

        //包含
        if (includeFields.contains(fieldName)) {
            return false;
        }
        //排除
        if (excludeFields.contains(fieldName)) {
            return true;
        }

        // 开启全部放行
        if (fieldsAll) {
            return false;
        }

        //默认拦截全部
        return true;
    }

    public static <T> ObjToCSV<T> create(T object, String separator) {
        return new ObjToCSV<T>(object, separator);
    }
    public static <T> ObjToCSV<T> create(T object) {
        return new ObjToCSV<T>(object);
    }
    public static <T> ObjToCSV<T> create(List<T> object, String separator) {
        return new ObjToCSV<T>(object, separator);
    }
    public static <T> ObjToCSV<T> create(List<T> object) {
        return new ObjToCSV<T>(object);
    }
    //全部放行
    public ObjToCSV<T> fieldsAll() {
        fieldsAll = true;
        return this;
    }

    //包含
    public ObjToCSV<T> addIncludeFields(String... fieldName) {
        includeFields.addAll(Arrays.asList(fieldName));
        return this;
    }

    //排除
    public ObjToCSV<T> addExcludeFields(String... fieldName) {
        excludeFields.addAll(Arrays.asList(fieldName));
        return this;
    }

    //添加头部
    public ObjToCSV<T> addHead() {
        StringBuilder str1 = new StringBuilder();
        Class<?> aClass = this.object.getClass();
        Field[] fields = aClass.getDeclaredFields();
        int length = fields.length;
        for (int i = 0; i < length; i++) {
            Field field = fields[i];
            field.setAccessible(true);
            if (decideFields(field.getName())) {
                continue;
            }
            str1.append(field.getName()).append(separator);
        }
        int length1 = separator.length();
        String substring = str1.substring(0, str1.length() - length1);
        this.str.append(substring + "\n");
        return this;
    }
    //在结尾补充自定义的描述
    public ObjToCSV<T> addEnding(Function<ObjToCSV,String> functor){
        String apply = functor.apply( this);
        this.str.append(apply);
        return this;
    }


    //将对象转换为CSV格式字符串
    @SneakyThrows
    public ObjToCSV<T> addContent() {
        StringBuilder str1 = new StringBuilder();
        Class<?> aClass = this.object.getClass();
        Field[] fields = aClass.getDeclaredFields();
        int length = fields.length;
        for (int i = 0; i < length; i++) {
            Field field = fields[i];
            field.setAccessible(true);
            if (decideFields(field.getName())) {
                continue;
            }
            Object o = field.get(object);
            String value = "";
            if (o != null) {
                value = String.valueOf(o);
            }
            str1.append(value).append(separator);
        }
        int length1 = separator.length();
        String substring = str1.substring(0, str1.length() - length1);
        this.str.append(substring + "\n");

        return this;
    }
    //将多个对象转换为csv格式
    public ObjToCSV<T> addContents() {
        for (T t : this.objects) {
            this.object=t;
            addContent();
        }
        return this;
    }
    //将结果输出为字符串
    public String ToString() {
        return str.toString();
    }



}

测试样例


package com.file;

import com.alibaba.fastJSON.jsONObject;
import com.data.RandomUserData;
import com.entity.UserData;
import com.file.csv.ObjToCSV;
import com.file.csv.ObjToCSV;
import com.function.impl.CodeStartAndStopTimeUtil;
import lombok.SneakyThrows;
import org.junit.Test;

import java.util.List;

public class ObjToCSVTest {


    //单个对象
    @Test
    public  void show1(){
        UserData userOne = RandomUserData.getUserOne();
        String s = ObjToCSV.create(userOne)
                .fieldsAll()
//                .addIncludeFields()
                .addExcludeFields("roleData")
//                .addHead()
                .addContent()
//                .addContents()
                .addEnding((data)->{
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("count",data.getNumber());
                    jsonObject.put("time",data.getCreateDate());
                    jsonObject.put("separator",data.getSeparator());
                    return  jsonObject.toJSONString();
                })
                .ToString();
        System.out.println(s);

    }


    //多个对象,可以使用自定义分隔符
    @Test
    public  void show2(){
        UserData userOne = RandomUserData.getUserOne();
        String s = ObjToCSV.create(userOne,"|")
                .fieldsAll()
                .addExcludeFields("roleData")
                .addContent()
                .addEnding((data)->{
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("count",data.getNumber());
                    jsonObject.put("time",data.getCreateDate());
                    jsonObject.put("separator",data.getSeparator());
                    return  jsonObject.toJSONString();
                })
                .ToString();
        System.out.println(s);
    }



    //排除不显示的,其他都显示
    @Test
    public  void show3(){
        List<UserData> userDatas = RandomUserData.getUserDatas(10);

        String s = ObjToCSV.create(userDatas,"|")
                .fieldsAll()//显示全部字段
                .addExcludeFields("roleData")//排除指定字段
                .addHead()
                .addContents()
                .addEnding((data)->{
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("count",data.getNumber());
                    jsonObject.put("time",data.getCreateDate());
                    jsonObject.put("separator",data.getSeparator());

                    return  jsonObject.toJSONString();
                })
                .ToString();
        System.out.println(s);
    }

    //只包含指定字段 ,其他都不显示
    @Test
    public  void show4(){
        List<UserData> userDatas = RandomUserData.getUserDatas(10);

        String s = ObjToCSV.create(userDatas,"|")
                .addIncludeFields("id","name")
                .addHead()  //添加头部
                .addContents() //添加内容
                .addEnding((data)->{  //添加结尾信息
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("count",data.getNumber());
                    jsonObject.put("time",data.getCreateDate());
                    jsonObject.put("separator",data.getSeparator());
                    return  jsonObject.toJSONString();
                })
                .ToString();
        System.out.println(s);
    }


    //内容
    @Test
    public  void show5(){
        List<UserData> userDatas = RandomUserData.getUserDatas(10);
        String s = ObjToCSV.create(userDatas,"|")
                .fieldsAll()
                .addExcludeFields("roleData")//排除指定字段
                .addContents() //添加内容
                .ToString();
        System.out.println(s);
    }

    @SneakyThrows
    public static void main(String[] args) {
        List<UserData> userDatas = RandomUserData.getUserDatas(100);
        String s = ObjToCSV.create(userDatas)
                .fieldsAll()
//                .addIncludeFields()
                .addExcludeFields("roleData")
//                .addHead()
//                .addContent()
                .addContents()
                .addEnding((data)->{
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("count",data.getNumber());
                    jsonObject.put("time",data.getCreateDate());
                    return  jsonObject.toJSONString();
                })
                .ToString();
        System.out.println(s);


    }
}

到此这篇关于Java实现对象转CSV格式的文章就介绍到这了,更多相关Java对象转CSV内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

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

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java实现对象转CSV格式
    目录介绍代码样例测试样例介绍 csv全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件。CS...
    99+
    2022-11-13
  • Java实现CSV格式转对象
    目录介紹参考代码测试用例介紹 csv全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件。CS...
    99+
    2022-11-13
  • java string转map对象怎么实现
    要将Java中的String转换为Map对象,可以通过以下步骤实现: 为了将String转换为Map,首先需要将String解析...
    99+
    2023-10-28
    java
  • java object对象转数组怎么实现
    在Java中,可以使用反射来实现将对象转换为数组。首先,通过使用 getClass() 方法获取对象的类信息,然后使用 getDec...
    99+
    2023-10-18
    java
  • SpringBoot自定义对象参数实现自动类型转换与格式化
    目录序章一、实体类 Bean二、前端表单index.html三、Controller 类四、运行结果截图序章 问题提出一: 当我们用表单获取一个 Person 对象的所有属性值时, ...
    99+
    2022-11-13
  • Java状态设计模式实现对象状态转换的优雅方式
    目录介绍实现总结优点缺点应用场景介绍 Java状态模式(State Pattern)是一种面向对象的设计模式,它将对象的状态封装成独立的状态对象,并将对象的行为与状态对象解耦,它允许...
    99+
    2023-05-17
    Java状态设计模式 状态模式实现对象状态转换
  • Java将RTF转换为PDF格式的实现
    目录Jar包引入完整代码RTF文件的出色之处在于它的灵活性。RTF文件的性质使其非常适合那些使用不同软件进行工作的人。当然,这并不意味着文件应该永远保存为RTF文件。 有时我们希望将...
    99+
    2022-11-13
  • 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对象与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链式创建json对象的实现
    目录1、假设我们要创建一个json对象格式如下:2、往常创建JSON语法:3、解决方案——链式创建JSON:4、实现多级JSON5、YtJSONObject类...
    99+
    2022-11-13
  • Python如何实现xml格式转txt格式
    本篇内容介绍了“Python如何实现xml格式转txt格式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、前言最近学习Yolo v5是遇见...
    99+
    2023-06-29
  • Python实现RLE格式与PNG格式互转
    目录介绍1.PNG2RLE2.RLE2PNG3.示例4.完整代码如下介绍 在机器视觉领域的深度学习中,每个数据集都有一份标注好的数据用于训练神经网络。 为了节省空间,很多数据集的标注...
    99+
    2022-11-11
  • Java中的List<T>对象与Json格式的字符串的相互转换
    Java中的List对象与Json格式的字符串的相互转换 前提条件:引入JSON依赖,是由ali提供的一个fastjson com.alibaba fastjson 2.0.16 ...
    99+
    2023-09-05
    java json spring 数据库
  • Java如何实现将PDF转为图片格式
    本文小编为大家详细介绍“Java如何实现将PDF转为图片格式”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java如何实现将PDF转为图片格式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。代码编译环境Intel...
    99+
    2023-07-05
  • Java实现将CSV转为Excel的示例代码
    目录一、程序环境二、将CSV转为Excel补充CSV(Comma Separated Values)文件是一种纯文本文件,包含用逗号分隔的数据,常用于将数据从一个应用程序导入或导出到...
    99+
    2022-11-13
  • 关于pytest结合csv模块实现csv格式的数据驱动问题
    目录一、什么是数据驱动测试二、csv文件承载数据三、csv数据驱动示例一、什么是数据驱动测试 DDT:data drive test准备一组数据,通过写一个测试用例,不同的数据进行迭...
    99+
    2022-11-11
  • C#实现OFD格式与PDF格式的互转
    目录OFD转为PDF1.按照如下步骤引入Spire.Pdf.dll2.代码示例PDF转为OFD示例代码OFD转为PDF OFD格式的文档是一种我国独有的国家标准版式的文档,在不同场景...
    99+
    2022-11-13
  • Java如何实现bmp和jpeg图片格式互转
    这篇“Java如何实现bmp和jpeg图片格式互转”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何实现bmp和jp...
    99+
    2023-07-06
  • Java如何实现字符串转为驼峰格式
    这篇文章主要介绍了Java如何实现字符串转为驼峰格式的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java如何实现字符串转为驼峰格式文章都会有所收获,下面我们一起来看看吧。字符串转为驼峰格式 构建工具类pack...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作