opencsv操作CSV文件
1. CSV文件简介
现在好多的网站中导出的文件会出现一种csv文件,我们接下来学习一下csv文件的导出方式。
CSV文件:Comma-Separated Values,中文叫逗号分隔值或者字符分割值,其文件以纯文本的形式存储表格数据。该文件是一个字符序列,可以由任意数目的记录组成,记录间以某种换行符分割。每条记录由字段组成,字段间的分隔符是其他字符或者字符串。所有的记录都有完全相同的字段序列,相当于一个结构化表的纯文本形式。
用文本文件、excel或者类似与文本文件的编辑器都可以打开CSV文件。
为了简化开发,我们可以使用opencsv类库来导出csv文件
1.1.需要的依赖
<dependency><groupId>com.opencsv</groupId><artifactId>opencsv</artifactId><version>4.5</version>
</dependency>
1.2 opencsv常用API
写入到csv文件会用到CSVWriter对象,创建此对象常见API如下
使用CSVWriter对象写入数据常用的方法如下:
读取csv文件会用到CSVReader对象,创建此对象常见API如下
构造器涉及到的三个参数:
- reader:读取文件的流对象,常有的是BufferedReader,InputStreamReader。
- separator:用于定义前面提到的分割符,默认为逗号CSVWriter.DEFAULT_SEPARATOR用于分割各列。
- quotechar:用于定义各个列的引号,有时候csv文件中会用引号或者其它符号将一个列引起来,例如一行可能是:“1”,“2”,“3”,如果想读出的字符不包含引号,就可以把参数设为:"CSVWriter.NO_QUOTE_CHARACTER "
read方法
2.3 导出CSV文件
2.3.1 需求
我们还是以需求作为学习的驱动:把用户的列表数据导出到csv文件中
2.3.2 代码实现
UserController代码
@GetMapping(value = "/downLoadCSV",name = "导出用户数据到CSV文件中")
public void downLoadCSV(HttpServletResponse response){userService.downLoadCSV(response);
}
UserService代码
public void downLoadCSV(HttpServletResponse response) {try {// 准备输出流ServletOutputStream outputStream = response.getOutputStream();// 文件名String filename="百万数据.csv";// 设置两个头 一个是文件的打开方式 一个是mime类型response.setHeader( "Content-Disposition", "attachment;filename=" + new String(filename.getBytes(),"ISO8859-1"));response.setContentType("text/csv");// 创建一个用来写入到csv文件中的writerCSVWriter writer = new CSVWriter(new OutputStreamWriter(outputStream,"utf-8"));// 先写头信息writer.writeNext(new String[]{"编号","姓名","手机号","入职日期","现住址"});// 如果文件数据量非常大的时候,我们可以循环查询写入int page = 1;int pageSize=200000;while (true) { //不停地查询List<User> userList = this.findPage(page, pageSize);if (CollectionUtils.isEmpty(userList)) { //如果查询不到就不再查询了break;}// 把查询到的数据转成数组放入到csv文件中for (User user : userList) {writer.writeNext(new String[]{user.getId().toString(),user.getUserName(),user.getPhone(),simpleDateFormat.format(user.getHireDate()),user.getAddress()});}writer.flush();page++;}writer.close();} catch (Exception e) {e.printStackTrace();}
}
2.4 了解opencsv读取CSV文件
读取刚才导出的CSV文件
package com.itheima.test;import com.itheima.pojo.User;
import com.opencsv.CSVReader;import java.io.FileReader;
import java.text.SimpleDateFormat;
import java.time.Year;
import java.util.List;//读取百万级数据的csv文件
public class CsvDemo {private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");public static void main(String[] args) throws Exception {CSVReader csvReader = new CSVReader(new FileReader("d:\\百万用户数据的导出.csv"));String[] titles = csvReader.readNext(); //读取到第一行 是小标题
// "编号","姓名","手机号","入职日期","现住址"User user = null;while (true){user = new User();String[] content = csvReader.readNext();if(content==null){break;}user.setId(Long.parseLong(content[0]));user.setUserName(content[1]);user.setPhone(content[2]);user.setHireDate(simpleDateFormat.parse(content[3]));user.setAddress(content[4]);System.out.println(user);}}
}
opencsv操作CSV文件相关推荐
- openCsv读取csv文件
https://blog.csdn.net/cat_book_milk/article/details/52953786 Java读取csv文件 https://blog.csdn.net/galen ...
- python中csv文件操作_python中操作csv文件
python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...
- Pandas 操作 csv 文件
Pandas 操作 csv 文件 官方英文文档 官方文档PDF下载 中文文档 一.安装 Pandas 安装 Pandas: pip3 install pandas 导入 Pandas: import ...
- java 解析csv 乱码_Java采用opencsv解析csv文件以及解析中文乱码问题
参考资料: opencsv文档 写下本文时最新版的opencsv版本为4.0, maven坐标如下: com.opencsv opencsv 4.0 测试用test.csv id,date,name ...
- 使用.NET类库操作CSV文件
CSV文件,是指使用逗号对数据进行分割的文本数据文件.昨天有人提出了一个问题,就是怎么对CSV文件进行操作,并且给出了一个类的定义.我根据这个类定义实现了一个能够读些CSV文件的类. 由于涉及到了字符 ...
- pythoncsv文件的操作_python操作CSV文件
概念:CSV是逗号分隔值或者字符分割值,其文件以纯文本形式存储表格数据.CSV文件可以用文本文件或者转换成EXCEL(直接用EXCEL也可以,但是可能会有一些问题)打开.因此更适合通过CSV文件进行程 ...
- java解析csv文件工具类,java操作CSV文件工具类
离线路灯 UID:3 注册时间2011-08-21 最后登录2021-03-15 在线时间5398小时 发帖659 精华44 金币3650 威望1881 股份280 发帖659 金币3650威望188 ...
- Csvmapper操作csv文件
csv文件上传/读取/压缩/保存 import com.fasterxml.jackson.dataformat.csv.CsvMapper; import com.fasterxml.jackson ...
- opencsv解析csv文件
注意如果是UTF-8-BOM模式,第一行会有bom的头标识,请修改文件编码模式为UTF-8,否则第一列会为空 package com.ydd.tools;import java.io.File; im ...
最新文章
- django框架的基础知识点《贰》
- python将二维列表内容写入和读取.txt文件
- java用爬虫爬一个页面_使用Java写一个简单爬虫爬取单页面
- OpenCV中的CV_IMPL是什么意思?
- CAP原理和BASE思想
- 剑指offer六:旋转数组的最小数字
- python如何读取excel的一个sheet_python pandas是如何读取excel表中的sheet的(四)
- 如何提高VS2010的性能,VS2010不再…
- SpringBoot2.x集成Apache Shiro并完成简单的Case开发
- dbf转成excel_dbf转excel工具(DbfToExcel) v1.2 免费版
- 无损压缩算法专题——无损压缩算法介绍
- 输入数据求熵值法matlab代码,熵值法matlab程序
- ORAN专题系列-28:5G基站如何升级到ORAN基站 - O-RU - 平台和传输层的改进(VLAN, PCP, DHCP, DNS)
- BatteryProperty上报流程
- MACD指标在外汇交易中的另类运用方法
- for _ in range(100)中的下滑杠_表示什么意思?
- 深度学习在文档矫正中的应用
- docker中mysql数据定时备份_[Docker]MySql 定时备份
- 自动取款机属于计算机领域中的,《计算机知识》真题库290题
- 牛客网判断推理练习题