java大資料處理-大量資料到Excel

來源:互聯網
上載者:User

在JAVA Web開發中,經常需要匯出大量的資料到HTTP://www.aliyun.com/zixun/aggregation/16544.html">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代碼 <!--[if !vml]-->

<!--[endif]-->

package cn.luxh.struts2.action;

import java.io.FileWriter;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import cn.luxh.struts2.entity.Novel;

import com.opensymphony.xwork2.ActionSupport;

/**

* 匯出資料到csv檔

* @author Luxh

*/

public class CsvAction extends ActionSupport {

private static final long serialVersionUID = -2862629695443964658L;

/**

* 包含完整路徑的檔案名

* 傳遞給下載Action進行下載

*/

private String fileName;

/**

* 匯出資料

*/

public String exportData2CSV() {

List novels = getNovels();

fileName = "D:/novels.csv";

writeData2CSV(novels,fileName);

return SUCCESS;

}

/**

* 構造一些資料

* 實際上可能是從資料庫中把大量的資料查出來

*/

private List getNovels() {

List novels = new ArrayList();

Novel novel1 = new Novel("風雲第一刀","古龍",new Date());

Novel novel2 = new Novel("書劍恩仇錄","金庸",new Date());

Novel novel3 = new Novel("陸小鳳傳奇","古龍",new Date());

Novel novel4 = new Novel("鹿鼎記","金庸",new Date());

novels.add(novel1);

novels.add(novel2);

novels.add(novel3);

novels.add(novel4);

return novels;

}

/**

* 把資料按一定的格式寫到csv檔中

* @param novels 資料集合

* @param fileName csv檔完整路徑

*/

public void writeData2CSV(List novels,String fileName) {

FileWriter fw = null;

try {

fw = new FileWriter(fileName);

輸出標題頭

注意列之間用","間隔,寫完一行需要回車換行"\r\n"

String title = "序號,小說名稱,作者,出版日期\r\n";

fw.write(title);

String content = null;

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

for(int i=0;i

Novel novel = novels.get(i);

注意列之間用","間隔,寫完一行需要回車換行"\r\n"

content =(i+1)+","+novel.getName()+","+novel.getAuthor()+","+sdf.format(novel.getPublishDate())+"\r\n";

fw.write(content);

}

}catch(Exception e) {

e.printStackTrace();

throw new RuntimeException(e);

}finally {

try {

if(fw!=null) {

fw.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

設定檔:

Xml代碼 <!--[if !vml]-->

<!--[endif]-->

download

/download

${fileName}

4、看一下同樣的資料內容,csv檔和Excel檔的大小對比:

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.