opencsv

article/2025/9/28 13:59:04

简述

java读取csv的类库主要有两种,opencsv和javacsv,研究发现,javacsv在2014-12-10就不维护了。opencsv是apache的项目,并且至今仍在维护,所以项目中决定使用opencsv。

针对于maven 项目依赖 pom.xml 引入jar 如下:

<dependency><groupId>com.opencsv</groupId><artifactId>opencsv</artifactId><version>5.4</version>
</dependency>

 csv文件,全名 comma separated values,默认以逗号分隔,是纯文本文件。可以用记事本或者nodepad 打开看原始的文件内容。

例如:

name,age,birthday

jan,18,2002-09-09

macel,20,2001-08-09

读取方式:

  • 逐行读取:
//read line by line
reader = new CSVReader(new FileReader("employees.csv"));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {System.out.println(nextLine[0] + "," + nextLine[1] + "," + nextLine[2] + "," + nextLine[3]);
}
reader.close();
  • 全部读取:
CSVReader reader = new CSVReader(new FileReader("employees.csv"));
List<String[]> rows = reader.readAll();
for (String[] row : rows) {System.out.println(row[0] + "," + row[1] + "," + row[2] + "," + row[3]);
}
  • 转换Java object :

先写一个java类,例如:

public class Employee {public String firstName;public String lastName;public String email;public String department;//getters and setters@Overridepublic String toString() {return "Employee{" +"firstName='" + firstName + '\'' +", lastName='" + lastName + '\'' +", email='" + email + '\'' +", department='" + department + '\'' +'}';}
}
List<Employee> employees = new CsvToBeanBuilder(new FileReader("employees.csv")).withType(Employee.class).build().parse();
System.out.println(employees);

注解形式:

 @CsvBindByPosition  //该注解通过csv标题的位置打印数据

@CsvBindAndSplitByName(column = "Email") //文件中标题的名字

@CsvNumber("###.##")  //针对于数值的验证输出

@CsvDate("yyyy-MM-dd") //日期格式的转换

等等

public class Employee {public String firstName;public String lastName;@CsvBindByName(column = "Email")public String contact;
...
...
}

写入方式 :

  • 逐行写入
CSVWriter csvWriter = new CSVWriter(new FileWriter("list.csv"));
csvWriter.writeNext(new String[]{"John", "Doe", "jdoe@example.com", "Sales"});
csvWriter.writeNext(new String[]{"Jane", "Doe", "jane.doe@example.com", "HR"});
csvWriter.close();
  • 全部写入:
List<String[]> lines = getRecordsAsList();
csvWriter = new CSVWriter(new FileWriter("list.csv"));
csvWriter.writeAll(lines);
csvWriter.close();
  • 按sql查询写入:
csvWriter = new CSVWriter(new FileWriter("list.csv"));
Connection connection = DriverManager.getConnection("");
Statement stmt = connection.createStatement();
ResultSet resultSet = stmt.executeQuery("select * from employees");
csvWriter.writeAll(resultSet, true);
csvWriter.close();
connection.close();
  • java 类写入:
List<Employee> employees = getListOfEmployeesFromSomewhere();
Writer writer = new FileWriter("employees.csv");
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer).build();
beanToCsv.write(employees);
writer.close();

实战:

一行一行写入 + java类 

过滤器(CsvToBeanFilter):opencsv提供了过滤器,可以过滤某些行,比如page header、page footer等

/*** 该 Filter 用于过滤到统计数据的部分,并单独存储在变量中以共后续的查询核对*/public class OrderReadToBeanFilter implements CsvToBeanFilter {/*** 文件中的总交易笔数/金额数据*/String[] billSummaryInfo;@Overridepublic boolean allowLine(String[] line) {
//最后一行的列长度为2 if (line.length > 2) {return true;} else if (line.length == 2) {billSummaryInfo = line;}return false;}}

读取文件中内容示例: 

部分代码块:	//获取文件流
InputStream ins = sftpUtils.getFile("文件路径");OrderReadToBeanFilter myFilter = new OrderReadToBeanFilter();//获取记录信息 转成实体类 OrderList<Order> OrderList = new CsvToBeanBuilder(new InputStreamReader(ins, StandardCharsets.UTF_8)).withSkipLines(1).withSeparator(',').withFilter(myFilter).withType(Order.class).build().parse();if (CollectionUtils.isEmpty(OrderList)) {String message = "信息为空!";moveFailFile(sftpUtils, channelNextDirDD, fileName, readingFilePath, message);return null;}//计算记录总和long amountSum = OrderList.stream().mapToLong(OrderList::getTransAmount).sum();//获取文件中汇总信息String[] billSummaryInfo = myFilter.billSummaryInfo;

写文件csv 示例:

//创建本地文件File file = new File("文件路径");if (!file.getParentFile().exists()) {//如果父目录不存在,创建父目录file.getParentFile().mkdirs();}file = new File(fullPath);file.createNewFile();log.info("file local path:{}", file.getAbsolutePath());//将数据写入csv文件CSVWriter csvWriter = new CSVWriter(new FileWriter(fullPath, StandardCharsets.UTF_8));// 先写标题csvWriter.writeNext("{"交易时间", "金额","流水号"}");//写入记录数据StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(csvWriter).build();beanToCsv.write(resultList);//写入汇总数据csvWriter.writeNext("{"总条数", "总额"}");//业务订单总额long sum = resultList.stream().mapToLong(Order::getTransAmount).sum();csvWriter.writeNext(new String[]{String.valueOf(resultList.size()), String.valueOf(sum)});csvWriter.close();

引用链接:OpenCSV for Reading and Writing CSV file in Java - SpringHowLet’s take a look at reading and writing CSV files in java using OpenCSV with a few examples. First of all, OpenCSV is a CSV file (comma-separated values)https://springhow.com/opencsv/


http://chatgpt.dhexx.cn/article/LXJSLw0s.shtml

相关文章

python借助OpenCC实现中文繁体转简体

中文繁体转简体需要用到工具OpenCC 该工具可以支持多种中文之间的转换 安装方式见&#xff1a;https://github.com/yichen0831/opencc-python from opencc import OpenCC from gensim.corpora.wikicorpus import filter_wiki import re cc OpenCC(t2s)def wiki_replace(d):…

OpenCV(C++版)入门

了解Opencv Opencv是一个开源的计算机视觉编程程序库&#xff0c;可在windows&#xff0c;Linux&#xff0c;Mac&#xff0c;Android&#xff0c;iOS上面运行。目前Opencv已经到了第3版&#xff0c;增加了许多功能&#xff0c;API也全部迁移到了C&#xff0c;当然也有Python版…

OpenCV

1. 图像读取与显示 知识点&#xff1a;imread -- 读取图像 imshow -- 显示图像 imshow只支持浮点数类型跟字节类型图像显示 示例&#xff1a; #include<iostream> #include<opencv2\opencv.hpp>using namespace cv; using namespace std;int main(int argc, …

OpenCV入门【C++版】

OpenCV基础入门【C语言】 Chapter1 读取图片/视频/摄像头从文件读取图片从文件读取视频读摄像头 Chapter2 基础函数Chapter3 调整和剪裁Chapter4 绘制形状和文字Chapter5 透视变换Chapter6 颜色检测Chapter7 形状/轮廓检测Chapter8 人脸检测Project1 虚拟画家Project2 文档扫描…

windows使用opencc中文简体和繁体互转

OpenCC git项目地址 一、OpenCC介绍 OpenCC是一款开源的中文处理工具&#xff0c;支持字符级别的转换&#xff0c;可以在中文简体和繁体以及香港、台湾之间相互转换。git上提供了在Debian、Ubuntu、Fedora、Arch Linux、Mac OS以及Node.js的安装方法&#xff0c;并没有提供在…

【自然语言处理】opencc:中文繁体☞中文简体的转换

在看蚂蚁金服人工智能团队写的一篇关于中文的NLP的论文时&#xff0c;才知道有opencc这么个库&#xff0c;可以将中文繁体转为中文简体&#xff0c;大大简化了处理过程。 如果用的pycharm直接点开解释器&#xff0c;搜opencc&#xff0c;然后install openCC即可。也可以在Termi…

任务,行动,目标、绩效管理,计划

http://blog.hiddenwangcc.com/archives/3098?utm_sourcetuicool&utm_mediumreferral 但凡要给自己定目标&#xff0c;考虑时间管理、效能提升的人&#xff0c;都绕不开这三个概念&#xff1a;任务、目标和计划。 弄不清楚三者关系并且各种混用的大有人在&#xff0c;比如…

20款免费项目管理系统推荐

通过本篇文章您将了解&#xff1a;1、国内外20款最佳项目管理软件&#xff1b;2、使用免费项目管理工具可能面临的风险。 一、项目管理软件的重要性 根据 Capterra 的数据研究&#xff0c;项目管理软件即将成为人们最需要的软件。一个项目无论大小&#xff0c;都需要一款高效且…

一款开源免费的任务日程管理工具ToDoList

推荐给大家一款开源免费的任务日程管理工具ToDoList&#xff0c;是适合职场人尤其是程序员的经典任务管理软件&#xff0c;使用好的话会让大家在工作中事半功倍。 1.软件介绍 ToDoList是一款小众但功能强大的开源免费任务管理软件&#xff0c;它可以帮助你把要做的事情一项一项…

团队管理25--任务执行之轻重缓急

本文来谈一下我对任务执行中轻重缓急的理解&#xff0c;希望对大家有启发。 对于技术管理者来说&#xff0c;技术管理中任务执行是最得心应手的。因为我们大部分技术管理者都是从实干起家的&#xff0c;管理上的积累可能不够&#xff0c;但是任务执行的积累是最强的。任务执行…

Activiti6自学之路(七)——个人任务和组任务

Activiti6 任务有个人任务和组任务之分&#xff0c;理解两者的区别并且知道如何操作对应的任务是学习activiti重要一步。 本章承接上文章节&#xff0c;这里就不详细描述了 一、个人任务与组任务区别 个人任务&#xff1a;流程中的某个任务由指定的user来执行 组任务&#…

个人财务管理系统设计与实现

个人财务管理系统设计与实现 这里是分享个人的一份“个人财务管理系统”的设计报告,详细的介绍了整个项目的各个部分。 1 绪论 1.1 个人财务管理系统的研究背景与意义 随着中国经济的快速发展,无论是企业或是个人,各个环节都已经进入了金融化领域。在经济化潮流和金融危机的…

iSpace PIM 3.6.0.2027 个人任务管理系统发布

iSpace PIM是一款使用简单、设计灵巧、功能多样化的个人任务管理软件&#xff0c;包括待办事务管理、联系人管理等模块&#xff0c;可作为工作分解和任务管理的工具&#xff0c;实现高效的任务管理和工作过程知识记录和管理。 iSpace PIM 特色 支持树形结构式的父子任务分解…

如何做好项目管理任务分配

TL;DR 常见项目管理工具介绍项目管理最重要的内容谁来撰写以及分配任务如何有效地分配任务项目管理工具 在我工作的10多年中,使用过不少的项目管理系统,Excel, Microsoft Project, dotProject, Redmine, Jira, Teambition, Worktile, Tello…。比我谈过的女朋友还多。

ToDoList-简单有效的个人任务管理器

是否觉得日常工作很无序&#xff0c;经常工作杂乱无章&#xff0c;丢三落四&#xff0c;不能很好地控制每样工作的进度&#xff1f; (点击放大下图) 我一直在关注 ToDoList这个开源项目&#xff0c;它是一个简单有效的个人任务管理器&#xff0c;一树状结构显示所有任务。 □…

软件开发过程与项目管理(5.软件项目任务分解)

软件开发过程与项目管理&#xff08;5.软件项目任务分解&#xff09; 任务分解WBS工作包分解方法任务分解的基本步骤检验分解结果的标准WBS任务分解建议小结例题&#xff1a;简答题自练 任务分解 任务分解过程&#xff1a;将一个项目分解为更多的工作细目或者子项目&#xff0…

Activiti 学习笔记12:分配个人任务

一、流程图 二、分配个人任务方式一&#xff08;直接指定办理人&#xff09; 1、流程图中任务节点的配置 2、测试代码 ProcessEngine processEngine ProcessEngines.getDefaultProcessEngine(); //部署流程定义&#xff0c;启动流程实例Testpublic void testTask() throw…

分布式定时任务开源方案

目录 1、quartz1.1 架构1.2 优缺点 2、elastic-job2.1 架构2.2 优缺点 3、xxl-job3.1 架构3.2 优缺点 4、Saturn4.1 架构4.2 优缺点 5、antares5.1 架构5.2 优缺点 6、opencron6.1 优缺点 方案对比 1、quartz quartz的集群方案是使用数据库来实现的。通过在数据库中配置定时器…

做好目标管理和任务管理,提高办公协同效率

工作一段时间后&#xff0c;或者参与一个项目后&#xff0c;你会发现团队里每个人都非常优秀&#xff0c;工作也充满热情&#xff0c;但是整体的效率就是上不去&#xff1f;因为&#xff0c;一个团队的整体效率&#xff0c;并不是每个人效率的相加。因为这里面有协作成本。 如…

基于javaweb个人记账管理系统设计与实现(项目源码+论文+毕业设计任务书)

摘 要 随着互联网的快速发展&#xff0c;人们生活节奏日益加快&#xff0c;关于过度消费是大多数人头疼问题&#xff0c;导致出现不少的月光族&#xff0c;如我们定期花点时间去记录生活中的主要消费记录&#xff0c;掌握自己的收入和支出情况&#xff0c;这样你就会发现一些规…