CSV(大数据)的.csv文件导出

一。构建CsvUtil

.csv格式可以导出数据行数没有限制,如果打开方式选择的EXCEL格式则会受到Excel的最大行数的限制,但是数据依然是存在的,如果是用txt或者使用notepad打开则可以显示所有的数据

<dependency>
    <groupId>net.sourceforge.javacsv</groupId>
    <artifactId>javacsv</artifactId>
    <version>2.0</version>
</dependency>
 
public class CsvUtil {
        public interface WriteCsv {
            void write(CsvWriter csvWriter) throws Exception;
        }
       
        public static void writeCsv(String fileName,HttpServletResponse response, CsvUtil.WriteCsv writeCsv){

            try {
                // 创建临时文件
                File tempfile = File.createTempFile(fileName, ".csv");
                
                // 创建 CsvWriter 对象
                CsvWriter csvWriter = new CsvWriter(tempfile.getCanonicalPath(),',', Charset.forName("GBK"));
                
                // 接口需要实现的方法
                writeCsv.write(csvWriter);
                
                // 关闭 CsvWriter 对象
                csvWriter.close();
                
                // 获取写入数据的临时文件
                File fileLoad=new File(tempfile.getCanonicalPath());
                
                // 返回给前端
                CsvUtil.downLoadCsv(fileName+".csv", fileLoad, response);
            }catch (Exception e){
                e.printStackTrace();
            }
            
}

public static void downLoadCsv(String fileName, File fileLoad, HttpServletResponse response) {
        try {
            byte[] b=new byte[1024];
            OutputStream out=response.getOutputStream();
            response.reset();
            response.setContentType("application/csv");
            response.setHeader("content-disposition", "attachment; filename="+ URLEncoder.encode(fileName, "UTF-8"));
            Long filelength=fileLoad.length();
            response.setHeader("Content_Length",String.valueOf(filelength));
            FileInputStream fileInputStream=new FileInputStream(fileLoad);
            int n;
            while ((n = fileInputStream.read(b)) != -1) {
                out.write(b, 0, n); //每次写入out1024字节
            }
            fileInputStream.close();
            out.close();
        } catch (IOException e) {
            try {
                throw new Exception(e.getMessage());
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    }
}

二、在Controller层调用

controller层定义返回值为void

 String[] headers={"列名1","列名2","列名3","列名4","列名5","列名6","列名7","列名8"};
    
    // 调用service层获取list集合
    List<T> list = Service.getList();
    CsvUtil.writeCsv("文件名", response, new CsvUtil.WriteCsv() {
            @Override
            public void write(CsvWriter csvWriter) throws Exception {
                csvWriter.writeRecord(headers1);
                if (list!=null && !list.isEmpty()){
                // 遍历List集合,将每条数据对应写入
                    for (DiguaUserActionTO data:list) {
                        csvWriter.write(data.getResName());
                        csvWriter.write(data.getPv3());
                        csvWriter.write(data.getUv3());
                        csvWriter.write(data.getPv15());
                        csvWriter.write(data.getUv15());
                        csvWriter.write(date);
                        csvWriter.endRecord();
                    }
                }
            }
        });

三、以流的形式输出到指定目录

public static void downLoadCsv(String fileName, File fileLoad){
        try {
            byte[] b=new byte[1024];
            FileOutputStream out = new FileOutputStream(fileName);
            FileInputStream fileInputStream=new FileInputStream(fileLoad);
            int n;
            while ((n = fileInputStream.read(b)) != -1) {
                out.write(b, 0, n); //每次写入out1024字节
            }
            fileInputStream.close();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

解决数字超过12位后,excel打开数字科学计数的问题:

  1. csvWriter.writeRecord(Array,true)
  2. 每个Array元素中添加\t制表符
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
技能大赛大数据技术与应用中的数据源主要是以CSV格式存储的数据CSV(Comma-Separated Values,逗号分隔值)是一种常用的数据交换格式,由于其简单、易读且易于处理的特点,被广泛应用于大数据技术与应用领域。 CSV数据源可以包含各种类型的数据,例如数字、文字、日期等,并且可以包含多个字段。每个字段之间通常由逗号分隔,并且一个或多个字段可以组成一条记录。 在技能大赛中,大数据技术与应用使用CSV数据源主要有以下几个方面的应用: 1. 数据导入和导出:将CSV格式数据源导入到大数据平台中,或将处理后的结果导出CSV文件。通过这种方式,可以实现数据的灵活导入和导出,方便数据的处理和分析。 2. 数据清洗和预处理:CSV数据源可以进行简单的数据清洗和预处理,例如去除重复数据、删除空值、格式转换等。这些操作可以提高数据的质量和准确性,为后续的分析工作奠定基础。 3. 数据分析和挖掘:通过应用各种大数据技术和算法,对CSV数据源进行深入的分析和挖掘。例如,可以通过数据挖掘算法发现隐藏在数据中的模式和规律,进而提供决策支持和业务优化建议。 4. 可视化展示:将CSV数据源中的数据进行可视化展示,以图表、图像或地图等形式呈现,可以更直观地理解和分析大数据。 综上所述,CSV数据源是技能大赛大数据技术与应用中常见的数据来源之一。通过对CSV数据源的处理和分析,可以获得有价值的信息和洞察,支持决策和业务优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值