java大数据处理-大量数据到Excel

在Java Web开发中,经常需要导出大量的数据到Excel,使用POI、JXL直接生成Excel,很容易就造成内存溢出了。

  1、有一种方式,就是把数据写成csv格式文件。

  1)csv文件可以直接用Excel打开。

  2)写csv文件的效率和写txt文件的效率一样高。

  3)同样的数据内容,生成的csv文件的大小远远小于生成的Excel文件。

  从以上优点就可以看出生成csv文件消耗的内存绝对小于生成Excel文件。

  2、按一定的格式去生成csv文件,在Excel中打开的时候就是完整的行和列格式。

  例如:在Excel中的格式:

                                   

  那么,在csv文件中格式就必须为:

                                  

  就是说,列和列之间,需要用英文输入法状态下的逗号", "间隔:风云第一刀, 古龙。

  3、在Struts2中导出数据到Excel,一个简单的例子。

  CsvAction,生成csv文件,并且将生成的csv文件完整路径传递到下载Action。

 

Java代码   收藏代码
  1. package  cn.luxh.struts2.action;  
  2.   
  3. import  java.io.FileWriter;  
  4. import  java.io.IOException;  
  5. import  java.text.SimpleDateFormat;  
  6. import  java.util.ArrayList;  
  7. import  java.util.Date;  
  8. import  java.util.List;  
  9.   
  10. import  cn.luxh.struts2.entity.Novel;  
  11.   
  12. import  com.opensymphony.xwork2.ActionSupport;  
  13.   
  14.   
  15. /**  
  16.  * 导出数据到csv文件  
  17.  * @author Luxh  
  18.  */   
  19. public   class  CsvAction  extends  ActionSupport {  
  20.   
  21.     private   static   final   long  serialVersionUID = -2862629695443964658L;  
  22.       
  23.     /**  
  24.      * 包含完整路径的文件名  
  25.      * 传递给下载Action进行下载  
  26.      */   
  27.     private  String fileName;  
  28.       
  29.       
  30.     /**  
  31.      * 导出数据  
  32.      */   
  33.     public  String exportData2CSV() {  
  34.         List<Novel> novels = getNovels();  
  35.         fileName = "D:/novels.csv" ;  
  36.         writeData2CSV(novels,fileName);  
  37.         return  SUCCESS;  
  38.           
  39.     }  
  40.       
  41.     /**  
  42.      * 构造一些数据  
  43.      * 实际上可能是从数据库中把大量的数据查出来  
  44.      */   
  45.     private  List<Novel> getNovels() {  
  46.         List<Novel> novels = new  ArrayList<Novel>();  
  47.           
  48.         Novel novel1 = new  Novel( "风云第一刀" , "古龙" , new  Date());  
  49.         Novel novel2 = new  Novel( "书剑恩仇录" , "金庸" , new  Date());  
  50.         Novel novel3 = new  Novel( "陆小凤传奇" , "古龙" , new  Date());  
  51.         Novel novel4 = new  Novel( "鹿鼎记" , "金庸" , new  Date());  
  52.           
  53.         novels.add(novel1);  
  54.         novels.add(novel2);  
  55.         novels.add(novel3);  
  56.         novels.add(novel4);  
  57.           
  58.         return  novels;  
  59.     }  
  60.       
  61.     /**  
  62.      * 把数据按一定的格式写到csv文件中  
  63.      * @param novels     数据集合  
  64.      * @param fileName  csv文件完整路径  
  65.      */   
  66.     public   void  writeData2CSV(List<Novel> novels,String fileName) {  
  67.         FileWriter fw = null ;  
  68.         try  {  
  69.             fw = new  FileWriter(fileName);  
  70.             //输出标题头   
  71.             //注意列之间用","间隔,写完一行需要回车换行"\r\n"   
  72.             String title = "序号,小说名称,作者,出版日期\r\n" ;  
  73.             fw.write(title);  
  74.               
  75.             String content = null ;  
  76.             SimpleDateFormat sdf = new  SimpleDateFormat( "yyyy-MM-dd" );  
  77.             for ( int  i= 0 ;i<novels.size();i++) {  
  78.                 Novel novel = novels.get(i);  
  79.                 //注意列之间用","间隔,写完一行需要回车换行"\r\n"   
  80.                 content =(i+1 )+ "," +novel.getName()+ "," +novel.getAuthor()+ "," +sdf.format(novel.getPublishDate())+ "\r\n" ;  
  81.                 fw.write(content);  
  82.             }  
  83.         }catch (Exception e) {  
  84.             e.printStackTrace();  
  85.             throw   new  RuntimeException(e);  
  86.         }finally  {  
  87.             try  {  
  88.                 if (fw!= null ) {  
  89.                     fw.close();  
  90.                 }  
  91.             } catch  (IOException e) {  
  92.                 e.printStackTrace();  
  93.             }  
  94.         }  
  95.     }  
  96.   
  97. }  

 

 配置文件:

 

Xml代码   收藏代码
  1. <!--将csv文件路径传递到公共的下载Action进行下载  -->   
  2.          < action   name = "exportData2CSV"   class = "cn.luxh.struts2.action.CsvAction"   method = "exportData2CSV" >   
  3.             < result   type = "redirectAction" >   
  4.                 < param   name = "actionName" > download </ param >   
  5.                 < param   name = "nameSpace" > /download </ param >   
  6.                 <!--附件的完整路径 ,传递给下载Action -->   
  7.                 < param   name = "fileName" > ${fileName} </ param >   
  8.             </ result >   
  9.         </ action >   

  4、看一下同样的数据内容,csv文件和Excel文件的大小对比:  

                                        

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值