• 搜索
    搜新闻
  • 您的位置: 首页 >  资讯

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

    博客园来源:2023-08-18 16:38:02


    (资料图)

    前言

    最近公司一个新的项目,因为需要存储的数据很少,单独去部署一个数据库去存储该数据显然是不划算的,所以想的是通过存入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注解的方式。

    导入相应的依赖
    点击查看
       com.opencsv   opencsv   5.6 
    实体类加注解
    @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 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 statefulBeanToCsv = new StatefulBeanToCsvBuilder(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 csvToBean = new CsvToBeanBuilder(reader)                        .withType(DataGram.class)                        .build();                List 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 list = new ArrayList<>();list.add(dataGram);        list.add(dataGram1);        writeDataListToCsv(list);
    List list = csvToBeanByPositionAnnotation();        System.out.print(list);

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

    关键词:

    下一篇: 最后一页
    上一篇: 新课标背景下民族地区学校校本教研转型及优化策略