大批量数据导出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").可避免上述现象。

  

你可能感兴趣的:(Web,Excel,F#,cvs)