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

这篇具有很好参考价值的文章主要介绍了将实体类对象数据存入和读取进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);

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

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

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


至此所有的操作都完成了,当然面对不同的需求会有不同的写入方法,写入csv文件的方法肯定也不会只有这一种。感谢大家观看。文章来源地址https://www.toymoban.com/news/detail-655502.html

到了这里,关于将实体类对象数据存入和读取进csv文件(可追加)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JS读取本地CSV文件数据

    文件中的部分数据如图 需求是需要提取出文件的数据 使用到的模块是 Papa Parse yarn add papaparse papaparse 的基本使用可以参考官方demo 首先需要注意, papaparse 解析本地文件, 需要的文件格式是从 DOM 中获得的 File 对象, 不能直接使用 require() 导入文件 以下方法直接导入是不可行的

    2024年02月07日
    浏览(28)
  • Jmeter读取CSV文件数据并使用

    1、准备CSV文件数据   2、在新建的线程组下添加:  CSV 数据文件设置   ,根据需要设置字段,其中 变量名称 根据CSV中字段列来填写 3、设置好CSV数据文件设置后,可以在取样器中使用,根据设置的变量名称来取值 4、通过 察看结果树,可以查看取值是否正确   5、若CSV文件

    2024年02月16日
    浏览(28)
  • 【数据处理】Pandas读取CSV文件示例及常用方法(入门)

    查看读取前10行数据 2067 向前填充 指定列的插值填充 使用某数据填充指定列的空值 示例: 类似切片 array([‘SE’, ‘cv’, ‘NW’, ‘NE’], dtype=object) 类似数据库查询中的groupby查询 先添加新的一列按月将数据划分 聚合,对指定的列按月划分求平均值等 min 最小值 max 最大值 sum

    2024年02月06日
    浏览(52)
  • python 读取文件夹下子文件夹下的csv数据表

    可以使用 Python 中的  os  和  csv  模块来读取文件夹下的文件夹的 csv 数据。具体的步骤如下: 导入  os  和  csv  模块。 使用  os  模块的  listdir  函数列举出目标文件夹下的所有子文件夹的名称。 对于每个子文件夹,列举出其中的所有 .csv 文件的名称,并逐一读取 csv

    2024年02月11日
    浏览(58)
  • 如何使用pandas读取csv文件中的某一列数据

    使用pandas读取csv文件中的某一列数据,可以这样做: 先导入pandas模块: import pandas as pd 使用 pd.read_csv 函数读取csv文件: df = pd.read_csv(\\\"文件名.csv\\\") 使用 df[\\\"列名\\\"] 读取某一列数据: column = df[\\\"列名\\\"] 例如,如果你有一个csv文件叫做 example.csv ,并且有一列叫做 age ,你可以这样

    2024年02月13日
    浏览(31)
  • python入门,文件的编码,读取,写入,追加

    目录 1.文件的编码 2.文件的读取 1.open()函数打开文件 2.rede()读取文件 3.readlines()方法 4.readline()方法 5.for循环读取  3.文件的关闭 withopen语法 4.文件的写入 1.write写入字符串 2.flush 5.文件的追加 计算机只认得0和1,文件的编码即一种对应方式,比如说“小红”在某一种

    2024年01月21日
    浏览(35)
  • Python编程读取csv文件数据分别计算RMSE、SD、R

    使用 Pandas 和 NumPy 库,从 CSV 文件中读取数据,并对列名进行了更新。使用循环计算了三组数据的 RMSE、标准差和相关系数,并将结果打印输出。其中,RMSE(Root Mean Squared Error)是衡量预测值和真实值之间误差的一种方法;SD(Standard Deviation)是预测值和真实值之间误差的标准

    2024年02月20日
    浏览(27)
  • CSV导出(通过读取数据字节流直接上传文件到服务器)

    文件之前读取大多数都是用前端点击相应传入后端,通过HttpServletResponse response得输入输出流进行导入导入导出数据。 近期碰到得需求是定时查询数据库数据并通过csv文件上传至系统。所以不能使用HttpServletResponse,因为对应文件流比较熟悉所以最开始使用文件流进行读写数据

    2024年02月12日
    浏览(43)
  • java修改properties文件内容(读取、修改、追加)

    PropertiesConfiguration 是 Apache 帮我们实现按照文件的顺序读取properties文件的类,Properties类能做的它都能做。不仅如此,他还有许多方便实用的附加功能。 工具类: 除此之外,还可以 propsConfig.setEncoding(\\\"utf-8\\\") 设置编码。 需要的maven依赖:

    2024年02月06日
    浏览(36)
  • Python 文件处理指南:打开、读取、写入、追加、创建和删除文件

    文件处理是任何Web应用程序的重要部分。Python有多个用于创建、读取、更新和删除文件的函数。 在Python中处理文件的关键函数是open()函数。open()函数接受两个参数:文件名和模式。 有四种不同的方法(模式)可以打开文件: \\\"r\\\" - 读取 - 默认值。打开一个文件以进行读取,如

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包