java零基础入门-如何导出csv文件?这你得会

493 阅读6分钟

我正在参加「掘金·启航计划」。

哈喽,各位小伙伴们好,我是喵手。

       今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流 学 习,互相学习,才能成长的更快,对吧。

       我是一名java开发,所以日常接触到最多的就是java啦,所以我趁自己有空,就来好好回忆,把自己学到的会的,进行输出,不图什么有回报,只想能帮助到更多的小伙伴,就好。

       小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对喵手我创作道路上最好的鼓励与支持!

一、概述

       论前几期啊,我们是分别讲了Object类Date类FormDate类Calendar类System类StringBuilder类,不知道大家掌握的如何,如果没有及时巩固的同学,可以看我这里,我给大家罗列了下,快速学习通道,只希望能帮助到大家更好的学习与成长,这就是我写作的初衷。

二、前言

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 !!!

-------------------------------------------

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

-------------------------------------------