我正在参加「掘金·启航计划」。
哈喽,各位小伙伴们好,我是喵手。
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流 学 习,互相学习,才能成长的更快,对吧。
我是一名java开发,所以日常接触到最多的就是java啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!
一、概述
论前几期啊,我们是分别讲了Object类、Date类、FormDate类、Calendar类、System类及StringBuilder类,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。
- java之Date类讲义
- java之DateFormat类讲义
- java之Calendar类讲义
- java之System类讲义
- java之StringBuilder类讲义
- java之Collection类
- java之包装类
- java之Iterator迭代器
- java之List集合
二、前言
1、背景:
今天我们就来讲个有趣的东西,跟java知识也是有很大的关联,在平日的开发过程中,还是具有很大概率能碰见的,就是csv文件转换。
其次当我提出来这个问题的时候,有的小伙伴可能就会问了,何为csv文件啊?是不是,很正常,在我没有遇到该文件格式的时候我也是不知,毕竟很少遇到啊,当某一天突然这个东西降落到你的头上,人在公司坐,活从天上来,我就是这样,让我处理一个文本,然后导出成csv文件,经理就告诉你,十分钟后就要,很简单的,视乎所有的需求在领导眼里都很简单,没错,因为开发的是我们呐,当然一句话的事还能不简单。
于是,安排给你,只能做了呀,做不出来再说,你们说是不是,总不能都没研究你就拒绝,说实现不了,那你明天就可以去人事处报到了吧。
2、概念:
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是bitASCII是最基本的通用编码。
CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。
以上解释来自百度百科,你们还不理解的你们还可以再去了解一遍。
三、实现
接下来,我们就要通过代码来实现这个需求了。
1、定义一个Controller接口
/**
* 数据导出成.csv文件
*/
@GetMapping("/export-csv")
@ApiOperation(value = "数据导出成.csv文件", notes = "数据导出成.csv文件")
public void exportCsvFile() throws IOException {
fileService.exportCsvFile();
}
2、定义一个实现转换方法接口
public interface FileService {
/**
* 数据导出成.csv文件
*/
void exportCsvFile() throws IOException;
}
3、实现接口方法
如下我就直接手动mock数据啦,反正如果你们要从数据库获取数据进行拼接,也是一样的,第一行是表头,第二行往后都是数据,必须按你的表头,进行对齐,一个逗号就是一列。
然后一行结束后,下一行记得要换行。
/**
* 数据导出成.csv文件
*/
@Override
public void exportCsvFile() throws IOException {
//我们如下就具体模拟数据进行导出懂啊csv文件了啊
//csv文件存放地址
String path = "./template/test.csv";
//拼接好转接的内容(这里我们就模拟一下啊)
String word = "";
//先把第一列表头固定好
String tableNames = "id,name,age,address";
//接着就是对于的数据内容。
String oneRow = "1,胡歌,30,北京朝阳";
String twoRow = "2,吴彦祖,2,深圳龙岗";
String threeRow = "3,范冰冰,30,上海徐汇";
String fourRow = "4,周杰伦,22,中国台湾";
//进行换行
word += tableNames + "\r\n";
word += oneRow+ "\r\n";
word += twoRow+ "\r\n";
word += threeRow+ "\r\n";
word += fourRow+ "\r\n";
//调用方法转csv文件
this.buildCsvFile(path,word);
}
4、封装一个csv方法导出
封装思想很重要,如果能够进行抽取那还是得要,抽成一个公共方法,口子就是文本跟文件保存路径。
/**
* 将字符串转成csv文件
*/
public void buildCsvFile(String savePath,String contextStr) throws IOException {
//创建存放
File file = new File(savePath);
//创建文件
file.createNewFile();
//创建文件输出流
FileOutputStream fileOutputStream = new FileOutputStream(file);
//将指定字节写入此文件输出流
fileOutputStream.write(contextStr.getBytes("gbk"));
fileOutputStream.flush();
fileOutputStream.close();
}
5、断点测试一下
接下来,我们就直接在swagger文档上进行接口调用。
我们在请求前打好断点,我们主要也就是看下我们拼接word内容,排版是否ok。
点击一下最右边的[view],我们可以看到,换行正常。
直接让请求结束,控制台也无报错信息,那我们接下来就直接检验是否生成该文件即可。
6、验证结果
很明显,我们查看文件夹,可以看到该文件生成了,[test.csv]。
我们通过安装的excel工具就可以打开csv文件。内容也是正常的。
其实有没有发现,csv文件跟excel文件格式非常的像,不看文件后缀,还真以为就是Excel文件。对吧,你们是不是也有这个错觉。
... ...
好啦,以上就是本期内容的全部教学内容啦,如果对文中的任何知识点有疑问,欢迎评论区评论留言呀,我看见都会一一解答的。
五、文末
教学是结束了,但是有些话不知我但讲不当讲,啊哈哈, 可我还是想说给你们听听。如下是我很喜 欢的一句话,我打算送给你们,希望我们都能变得更好更优秀。
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
-------------------------------------------
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
-------------------------------------------