首页 > 其他分享 >将实体类对象数据存入和读取进csv文件(可追加)

将实体类对象数据存入和读取进csv文件(可追加)

时间:2023-08-18 15:44:25浏览次数:34  
标签:文件 实体类 String list CsvBindByPosition new csv 读取

前言

  最近公司一个新的项目,因为需要存储的数据很少,单独去部署一个数据库去存储该数据显然是不划算的,所以想的是通过存入csv文件中来代替存入数据库中。说干就干。

什么是csv文件

  CSV代表逗号分隔值(Comma-Separated Values),是一种常见的文本文件格式,用于存储表格数据,例如电子表格和数据库中的数据。CSV文件以纯文本形式表示数据,其中每行代表一条记录,而每行中的字段则使用逗号或其他特定分隔符来分隔。

CSV文件的基本结构如下:

字段1,字段2,字段3,字段4,...
值1,值2,值3,值4,...
值1,值2,值3,值4,...
...

  在这个结构中,第一行通常是字段名,描述了每个列中存储的数据类型或含义。随后的行包含实际的数据值,每个值对应于其相应列中的字段。

  虽然称为“逗号分隔值”,但实际上分隔符并不一定是逗号。某些情况下,制表符(Tab)或分号等其他字符也可以用作分隔符,具体取决于文件的规范或数据的特定要求。

  以下是一个简单的示例:

姓名,年龄,性别,城市
Alice,25,女,纽约
Bob,30,男,洛杉矶
Cathy,22,女,芝加哥

  CSV文件非常常见,因为它们易于生成和解析,可以被许多不同的应用程序和编程语言处理。例如,许多电子表格软件(如Microsoft Excel、Google Sheets)和数据库系统都支持CSV文件的导入和导出。这使得CSV文件成为在不同系统之间共享数据的一种通用方式。

存入csv文件

  其实存入csv文件有很多种方法,今天我们主要讲的是@CsvBindByPosition注解的方式。

导入相应的依赖

点击查看
<dependency>
   <groupId>com.opencsv</groupId>
   <artifactId>opencsv</artifactId>
   <version>5.6</version>
 </dependency>

实体类加注解

    @CsvBindByPosition(position = 0)
    private String eventId;

    @CsvBindByPosition(position = 1)
    private String srcIndex;

    @CsvBindByPosition(position = 2)
    private String srcName;

    @CsvBindByPosition(position = 3)
    private Integer eventType;

    @CsvBindByPosition(position = 4)
    private String happenTime;

    @CsvBindByPosition(position = 5)
    private Integer realValue;

    @CsvBindByPosition(position = 6)
    private Integer isAlarm;

进行文件写入操作

new FileOutputStream(file, true)如果填的是true表示是在文件后面追加写入,默认是false,false就会导致后面的覆盖前面的内容。我这边需求是追加写入,所以写的是true。然后采用了时间来命名csv文件,方便后面查询的时候可以按照时间来查询对应的数据。

/**
     * 一行行向CSV写入内容
     *
     * @param
     * @param dataList 数据集合
     * @param
     * @param
     */
    public void writeDataListToCsv(List<DataGram> dataList) {
	//获取项目根目录下的file文件夹路径
        String filePath = System.getProperty("user.dir") + "/file";
	//获取当前时间
        String curTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        String path = null;
        try {
            path = new File(filePath, curTime + "warn.csv").getCanonicalPath();
            File file = new File(path);
            if (!file.exists()) {
                file.createNewFile();
            }
            OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(file, true), Charset.forName("UTF-8"));

            StatefulBeanToCsv<DataGram> statefulBeanToCsv = new StatefulBeanToCsvBuilder<DataGram>(writer)
                    .withApplyQuotesToAll(false)
                    .build();
            try {
                statefulBeanToCsv.write(dataList);
            } catch (CsvDataTypeMismatchException e) {
                e.printStackTrace();
            } catch (CsvRequiredFieldEmptyException e) {
                e.printStackTrace();
            }
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

读取csv文件的内容

/**
     * 基于CsvBindByPosition注解映射的读取
     *
     *
     */
    public List csvToBeanByPositionAnnotation() {
        String filePath = System.getProperty("user.dir") + "/file";
        String curTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        String path = null;
        try {
            path = new File(filePath, curTime + "warn.csv").getCanonicalPath();
            File fileLast = new File(path);
            if (fileLast.exists()){
                InputStreamReader reader = new InputStreamReader(new FileInputStream(path), Charset.forName("UTF-8"));
                // 不需要标题行,列的顺序通过CsvBindByPosition注解的position属性指定
                CsvToBean<DataGram> csvToBean = new CsvToBeanBuilder<DataGram>(reader)
                        .withType(DataGram.class)
                        .build();
                List<DataGram> list = csvToBean.parse();
                reader.close();
		return list;
	}
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

效果展示

        DataGram dataGram = new DataGram("1","2","3",4,"5",7,9);
        DataGram dataGram1 = new DataGram("a","b","c",2,"e",2,2);
        List<DataGram> list = new ArrayList<>();
	list.add(dataGram);
        list.add(dataGram1);
        writeDataListToCsv(list);

image

List list = csvToBeanByPositionAnnotation();
        System.out.print(list);

image


至此所有的操作都完成了,当然面对不同的需求会有不同的写入方法,写入csv文件的方法肯定也不会只有这一种。感谢大家观看。

标签:文件,实体类,String,list,CsvBindByPosition,new,csv,读取
From: https://www.cnblogs.com/kxxz/p/17640684.html

相关文章

  • 读取xls文件时报错 Initialisation of record 0x203(NumberRecord) left 4 bytes rema
    项目背景:公司的一个客户报告项目需要同步及抽取客户方的文件数据,文件类型为xls格式,文件为客户方的第三方厂商系统批量生成,工具及方法不明问题:读取该类xls文件后,无法成功创建Workbook,报错提示“Initialisationofrecord0x203(NumberRecord)left4bytesremainingstilltob......
  • OpenCV3.3深度神经网络DNN模块 实例1:读取单张PNG文件(opencv3.3环境测试)
    1#include<opencv2/opencv.hpp>2#include<opencv2/dnn.hpp>//dnn模块类3#include<iostream>45usingnamespacecv;6usingnamespacestd;78intmain(intargc,char**argv){9Matsrc=imread("tx.png");10......
  • OpenCV3.2图像分割 实例1:读取单张JPG图像(测试环境)
    1#include<opencv2/opencv.hpp>2#include<iostream>34usingnamespacecv;56intmain(intargc,char**argv)7{8Matsrc=imread("toux.jpg");//读取图像9if(src.empty())10{11printf("cou......
  • WPS做的ppt用office打开提示修复,但点击修复后提示部分内容无法读取
    本文来源:WPS做的ppt用office打开提示修复,但点击修复后提示无法读取问题的一点解决方法-知乎问题描述使用office的ppt打开一份别人用wps写好传过来的ppt文件,发现提示内容有问题,需要修复,如下图所示:点击“修复”按钮后显示部分内容无法读取,已被删除,如下图所示:解决方法亲测有......
  • JAVA SSH 连接服务器 去指定目录 检查文件 并读取json文件内容
    要使用JavaSSH连接服务器并检查文件,可以使用JSch库。以下是一个示例代码:importcom.jcraft.jsch.*;​importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;​publicclassSSHExample{publicstaticvoidmain(String[]ar......
  • csv reader utf-8报错:strict 改为ignore
    classBufferedIncrementalDecoder(IncrementalDecoder):"""ThissubclassofIncrementalDecodercanbeusedasthebaseclassforanincrementaldecoderifthedecodermustbeabletohandleincompletebytesequences."......
  • (Java实体类比表字段多处理方案)注解忽略实体类属性
    背景实体类多添加了几个字段用于查询,如果项目中使用了mybatis或mybatisplus会导致找不到表中字段的错误Causedby:java.sql.SQLSyntaxErrorException:Unknowncolumn'create_start_time'in'fieldlist'解决项目中使用mybatisimportorg.springframework.data.annotat......
  • .NET Core读取配置文件 配置文件可以是JSON、XML或INI等格式,需要添加 Microsoft.Exten
    .NETCore读取配置文件配置文件可以是JSON、XML或INI等格式需要添加Microsoft.Extensions.Configuration扩展包原文链接:https://pythonjishu.com/qipsfiygesyrqfi/下面是“.NETCore读取配置文件”的完整攻略:1.创建配置文件首先,我们需要在项目中创建一个配置文件,以便存......
  • 漏洞复现-金蝶云星空任意文件读取
    0x01产品简介金蝶云星空是一款云端企业资源管理(ERP)软件,为企业提供财务管理、供应链管理以及业务流程管理等一体化解决方案。金蝶云·星空聚焦多组织,多利润中心的大中型企业,以“开放、标准、社交”三大特性为数字经济时代的企业提供开放的ERP云平台。服务涵盖:财务、供应链......
  • 漏洞复现-金蝶云星空任意文件读取
    0x01产品简介金蝶云星空是一款云端企业资源管理(ERP)软件,为企业提供财务管理、供应链管理以及业务流程管理等一体化解决方案。金蝶云·星空聚焦多组织,多利润中心的大中型企业,以“开放、标准、社交”三大特性为数字经济时代的企业提供开放的ERP云平台。服务涵盖:财务、供......