大批量数据导出csv文件

     web系统中常见的对数据进行导出备份功能,通常我们按照要求都是导出excel文件。但是当数据量比较大时,数万条就可能比较慢甚至出现内存溢出。如果用户不强求excel导出的模板样式,字体等。则可以通过导出cvs文件来满足大批量数据导出。可以导出cvs文件后通过excel打开。

    网上下载了opencsv.jar包,通过提供的jar包进行cvs的文件导出,简单的代码如下

      String[] title =new String[]{"name,sex,age"};
        String[][] data = new String[][]{title, {"aa", "F", "22"}, {"bb", "M", "25"}, {"cc", "F", "19"}};

         File tempFile = new File("c:/cc.csv");        
         CSVWriter writer = new CSVWriter(new FileWriter(tempFile));
     

        for (int i = 0; i < data.length; i++) {
             writer.writeNext(data[i]);
         }
         writer.close();

    此种方法出现一个问题,就是CSVWriter对象的writeNext方法只能以数组作为参数。这样就会出现一个问题,当数据量很大的时候则需要开发人员封装相应的数据(字符串数组)。通过测试,很容易出现了内存溢出的现象。不能满足要求,此时对上述代码进行了改进,采用BufferWriter对象来实现上述功能,我们可以按照行数据进行封装,字段间以“,”逗号间隔,每行数据结束后以“\n”换行结束,可以将大数据量的数据进行封装成StringBuffer。

调用BufferWriter对象的write(finalString.toString()); 方法即可。这样避免了内存溢出,测试后到处速度有了很大的提升。   

         注意:当导出的数据中存在隐藏回车时,会出现比较诡异的现象(csv文件用editplus打开的时候假如是20行,但通过excel打开可能会出现20多行,由于数据中某字段数据存在隐藏回车,此时需要在行数据封装时给数据两边加双引号("\"")。可以解决上面的怪异现象.当存在科学计数现象或者日期字段数据被截取时,给该数据前加("\t").可避免上述现象。

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值