`
dyllove98
  • 浏览: 1409275 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:39181
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:80258
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:133378
社区版块
存档分类
最新评论

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。

 

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<Novel> novels = getNovels();
        fileName = "D:/novels.csv";
        writeData2CSV(novels,fileName);
        return SUCCESS;
        
    }
    
    /**
     * 构造一些数据
     * 实际上可能是从数据库中把大量的数据查出来
     */
    private List<Novel> getNovels() {
        List<Novel> novels = new ArrayList<Novel>();
        
        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<Novel> 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<novels.size();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();
            }
        }
    }

}

 

 配置文件:

 

<!--将csv文件路径传递到公共的下载Action进行下载  -->
         <action name="exportData2CSV" class="cn.luxh.struts2.action.CsvAction" method="exportData2CSV">
            <result type="redirectAction">
                <param name="actionName">download</param>
                <param name="nameSpace">/download</param>
                <!--附件的完整路径 ,传递给下载Action -->
                <param name="fileName">${fileName}</param>
            </result>
        </action>

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

                                        

 

 

 

 

52
30
分享到:
评论
12 楼 renzhen 2012-07-11  
原来我们有一个系统导出也用csv,其他的没有什么,只是excel默认打开编码为gbk的csv,其他编码显示乱码。这样导出的csv就不能包含如日文等特殊字符,还有如果对方的电脑是繁体版的,gbk编码的csv在他们的excel中会显示乱码。后来只好改用xlsx。
11 楼 tuyuan 2012-07-11  
devroller2 写道
有没有考虑数据量达到50w的情况?

我自己写了一个工具,excel单sheet  支持多大的数据量, 就能导出多少数据。 测试速度非常快。
10 楼 w156445045 2012-07-10  
我一般用BCP~
9 楼 devroller2 2012-07-10  
有没有考虑数据量达到50w的情况?
8 楼 liulijun.cn.2011 2012-07-10  
doudou586 写道
单元格的内容中如有逗号存在时,会造成EXCEL打开后错列。。。需处理。

标准的CSV格式应该是这个样子:
"xxx","xxx","xxxx","xxxxxx"
也就是每个值都在""中央,这样是不会出现因为,打开错列的现象。
特别对日外包中大量使用CSV文件导出数据,很少很少有使用楼主这种只使用,而不使用双引号的。
7 楼 liulijun.cn.2011 2012-07-10  
wjch_111 写道
doudou586 写道
单元格的内容中如有逗号存在时,会造成EXCEL打开后错列。。。需处理。

确实。


标准的CSV格式应该是这个样子:
"xxx","xxx","xxxx","xxxxxx"
也就是每个值都在""中央,这样是不会出现因为,打开错列的现象。
特别对日外包中大量使用CSV文件导出数据,很少很少有使用楼主这种只使用,而不使用双引号的。
6 楼 wjch_111 2012-07-10  
doudou586 写道
单元格的内容中如有逗号存在时,会造成EXCEL打开后错列。。。需处理。

确实。
5 楼 wjch_111 2012-07-10  
archy123 写道
复杂表头的可以实现吗?

+1同问
4 楼 Dead_knight 2012-07-10  
我总觉得大数据量的导出,需要对表格美观、导出性能有所取舍。如果是数据统计,在美观上有要求是正常的。既然是大数据量导出,至少也是万级别以上的,没必要那么美观。
3 楼 jade_phenix 2012-07-10  
纯文本输入的话还可以用ooxml格式的xml文本来显示带格式的大量记录输出。

如果要减少内在占用的话,可以每100条记录输出一次
2 楼 doudou586 2012-07-10  
单元格的内容中如有逗号存在时,会造成EXCEL打开后错列。。。需处理。
1 楼 archy123 2012-07-10  
复杂表头的可以实现吗?

相关推荐

    java Excel导出 Excel数据处理

    在实际项目中,你可能需要处理大量数据,这时性能优化就很重要。例如,可以使用SXSSF(Streaming Usermodel API)作为POI的一个子项目,它允许以内存最小化的方式处理大型Excel文件。 此外,如果你需要进行更复杂的...

    java poi 导入大数据量Excel数据 防止内存溢出处理.zip

    为了防止这种问题,我们需要采用优化策略来高效地处理大量数据。 1. **分块读取**:为了解决内存溢出问题,可以使用POI的SXSSF(Streaming Usermodel API)模型。SXSSF不是在内存中存储整个工作簿,而是将其写入...

    java动态大数据量EXCEL下载

    传统的Java Excel库,如Apache POI,虽然功能强大,但在处理大量数据时可能会遇到性能瓶颈,因为它们会将整个Excel文件加载到内存中。为了解决这个问题,可以使用一些优化策略,比如分块读写,只处理当前需要的部分...

    java-poi-excel-导出20万条记录【源代码】

    在Java开发中,处理大量数据导出到Excel文件是一个常见的需求,特别是在数据分析、报表生成或者数据备份等场景。本示例“java-poi-excel-导出20万条记录【源代码】”展示了如何使用Apache POI库来高效地处理大数据量...

    Java解析大数据量Excel,可解析1048576行excel

    1. **分块读取**: 为了处理大量数据,Apache POI提供了分块读取的机制。通过使用SXSSF(Streaming Usermodel API)模型,可以设置一个缓存大小,只将最近使用的行保留在内存中,其余行写入磁盘。这样可以显著降低...

    Java处理100万行超大Excel文件秒级响应

    通过使用EasyExcel,我们不仅解决了处理大量Excel数据时可能出现的内存溢出问题,还大大提高了数据处理的速度。对于104万行20列的大规模Excel文件,EasyExcel能够在70秒内完成处理,极大地提高了工作效率。未来,...

    java poi导出大量数据到Excel

    3. **异常处理**:在处理大量数据时,务必做好异常处理,防止因内存溢出等原因导致程序崩溃。 #### 六、总结 通过上述步骤,我们可以有效地利用Java POI库来实现将大量数据导出至Excel的功能。这种方式不仅提高了...

    java Excel上传 Excel数据处理

    "java Excel上传 Excel数据处理"这个主题涵盖了如何使用Java来接收并处理Excel文件的关键知识点。以下是对这些核心概念的详细阐述: 1. **Maven依赖**:在Java项目中处理Excel文件,通常会用到Apache POI库。首先,...

    js前端Excel大数据处理导入

    随着Web应用程序对数据处理能力的需求提升,前端工程师必须找到有效地处理大量数据的方法,而不仅仅是依赖后端服务器。本主题将深入探讨如何使用JavaScript来处理Excel文件,尤其是面对大数据量时的策略。 首先,...

    Java数据导出到Excel模板

    在Java Web开发中,数据导出到Excel是常见的需求,特别是在数据分析、报表生成以及数据交换等场景。本项目就是这样一个示例,它利用了Apache POI库来处理Excel文件的生成,使得Java程序能够方便地操作Excel数据。...

    java-excel-mysql互倒代码

    在实际应用中,这样的工具可以极大地提高数据处理效率,特别是在需要大量数据导入导出的场景下。 总结起来,"java-excel-mysql互倒代码"是一个使用Java,结合jxl和Apache POI库,实现与MySQL数据库之间数据交换的...

    java与前端交互--实现excel上传添加mysql表数据Ssm

    总之,通过SSM框架和Apache POI,我们可以实现从Excel文件高效地导入数据到MySQL数据库,提高数据处理的效率。在实际开发中,需要结合前端交互、文件处理、数据库操作等多个方面的知识,确保系统的稳定性和安全性。

    Java导出数据到Excel文件中(支持多表头)

    在代码实现中,我们需要创建一个`SXSSFWorkbook`对象,它是一个内存优化的Excel工作簿,可以处理大量数据。接着,我们创建`SXSSFSheet`作为工作簿中的工作表,并设置表头。一级表头可以通过`createRow`方法创建行并...

    java实现Excel数据导入到数据库

    在Java编程环境中,将Excel数据导入到数据库以及将数据库数据导出到Excel是常见的数据处理需求。本篇文章将深入探讨如何使用Java实现这两个功能,主要涉及的技术栈包括Apache POI库用于操作Excel,以及JDBC(Java ...

    javareport打印报表.rar(JavaReport-V3-Enterprise-Released)

    这对于处理大量数据和实时更新的报表需求非常有用。此外,JavaReport还有强大的分组、排序、过滤功能,能够帮助开发者实现复杂的报表逻辑。 在实际项目中,JavaReport通常与Java Web框架(如Spring MVC)或者Java...

    java解析excel并做数据有效性校验

    在Java编程中,解析Excel文件是一项常见的任务,特别是在数据处理、报表生成或数据分析等领域。Excel文件格式主要有两种:老式的`.xls`(基于BIFF格式)和较新的`.xlsx`(基于Open XML标准)。本篇将详细介绍如何...

    java 处理Excel 带 List

    在实际项目中,可能还需要考虑性能问题,因为处理大量数据时,内存消耗可能会很大。为了解决这个问题,可以使用SXSSF(Streaming Usermodel API)作为替代,它允许以流式方式处理Excel,从而减少内存占用。 总结来...

    Java 实现从Excel批量导入数据到MySQL

    在IT行业中,经常需要处理大量的数据,...总之,通过Java结合Apache POI和JDBC,我们可以高效地实现Excel数据批量导入到MySQL数据库,大大提升了数据处理的效率。这种技术在大数据处理、数据分析等领域有着广泛的应用。

    java中将数据和图片导出到Excel文件

    在Java编程环境下实现数据及图片导出至Excel文件是一项常见的任务,特别是在处理报表、数据分析等场景时。本文将详细解析如何通过Java代码来完成这一过程,包括如何创建Excel文档、写入数据、插入图片等关键步骤。 ...

    Java jxl操作Excel97-2003 eclipse可运行项目实例

    jxl库可以读取现有的Excel文件,创建新的Excel文件,或者修改已有文件中的内容,使得Java开发者能够方便地集成Excel数据处理到他们的应用程序中。 2. **使用环境** 这个实例是在Eclipse集成开发环境中运行的,...

Global site tag (gtag.js) - Google Analytics