java中导出大量数据到Excel的一种方法

java批量文件打包成压缩成zip下载和大量数据导出excel时的处理方法_java 导出多文件数据并打成zip报 优化时间方案(2) logger.error(Thread.currentThread().getStackTrace()[1].getMethodName() +"发生的异常是: ",e);* @time 2018年6月25日11:47:07。* @time 2018年6月25日11:47:07。* @time 2018年6月25日11:47:07。* @time 2018年6月25日11:47:07。* @time 2018年6月25日11:47:07。* @time 2018年6月5日14:47:21。 阅读详情

在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中导出数据到csv文件,并将生成的csv文件路径传递给下载Action进行下载。一个简单的例子。

  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);
            //输出标题头
            //注意列之间用","间隔,写完一行需要回车换行"rn"
            String title = "序号,小说名称,作者,出版日期rn";
            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);
                //注意列之间用","间隔,写完一行需要回车换行"rn"
                content =(i+1)+","+novel.getName()+","+novel.getAuthor()+","+sdf.format(novel.getPublishDate())+"rn";
                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>



SIwave:在 SIwave 中释放计算频率扫描的强大功能 AEDT 的电路工具允许注入正确的电压和电流。要使用电路工具,SIwave 必须首先使用 PI 求解器求解结构的 S 参数。 阅读详情

相关推荐

从波形到代码:手把手调试GaN图腾柱PFC的过零点切换与软启动策略

本文详细解析了GaN图腾柱无桥Boost PFC电路在过零点切换与软启动策略中的调试方法。通过波形分析、代码实现和寄存器配置,提供了解决误开通、震荡波形等问题的实用方案,帮助工程师优化电源设计效率与可靠性。

weixin_30831529的博客 424

Java导出大量数据到Excel解决方案

Java 导出Excel 大量数据导致程序崩溃问题

鸡蛋番茄炒饭的博客 2447

ArcGIS投影变换实战:从WGS_1984到Krasovsky_1940_Albers的精准转换

本文详细解析了在ArcGIS中如何将WGS_1984地理坐标系下的数据精准转换至Krasovsky_1940_Albers投影坐标系。文章通过实战案例,重点阐述了地理坐标系与投影坐标系的区别,并逐步演示了创建自定义地理变换、使用投影栅格工具以及进行批量处理和结果验证的核心操作流程,旨在解决地图数据叠加不准的常见问题。

weixin_29251131的博客 467

JAVA大量数据导出excel

背景:因项目需要导出3万行+,90列+的数据到excel,使用传统的apache poi 直接导出,导致504连接超时无法导出。然后改造方法,异步导出。

caijigskg的博客 3734

使用python读取卫星测高数据并做相应的处理

5.在python处理结果如下,最大的优点就是比matlab快30-40倍。4.进行粗差的如NaN值,还有进行3倍方差进行对粗差处理。1.首先遍历卫星数据的文件,挨个读取每个数据。有问题,请各位读者及时告知,一起完善内容。3.进行下一步,筛选在研究区域的数据。4.进行按天求平均和按月求平均。2.读取数据主体代码。

爱下去更难! 1133

使用 MATLAB/Simulink + Simscape Electrical 来构建一个CCHP微电网与新能源协同运行的模型

随着能源需求的增长和对环境保护要求的提高,冷热电联供(Combined Cooling, Heating and Power, CCHP)系统作为一种高效的分布式能源解决方案,越来越受到关注。CCHP系统通过利用一次能源同时产生电力、制冷和供热,实现了能源的梯级利用,提高了能源使用效率。结合太阳能、风能等可再生能源,可以进一步增强系统的灵活性和环保性。本文将详细介绍如何使用来构建一个CCHP微电网与新能源协同运行的模型,并通过仿真分析其性能表现。本文介绍了如何使用构建一个。

xiaoheshang_123的博客 141

JAVA将百万级数据高效的导出到EXCEL表单

JAVA将百万级数据高效的导出到EXCEL表单

波波的博客 4056

Python控制TEMI1000/TEMI1500测试温箱

该温箱是我司从昆山振弘检测设备有限公司采购的TEMI 1000,但是控制器用的是韩国的,关于控温箱这个项目,可参考的资料仅有一份官方的manual,里面包含一些命令格式。只要你有温箱,就应该可以向厂家索取该文档。该温箱的通讯接口只有一个RS232接口,要想实现远程控制,需要有串口转USB的线;类似于下图所以,想依靠python来与之进行通信,还是要通过python 的pyserial库,关于怎么安装pyserial,过于简单,这里不做赘述,可自行百度。

xgh1951的博客 1万+

Java实现大数据量导出报表

创建一个 Java 类表示导出的数据模型。// 构造方法、Getter 和 Setterreturn id;创建一个 Java 类表示导出的数据模型。// 构造方法、Getter 和 Setterreturn id;创建一个 Java 类表示导出的数据模型。// 构造方法、Getter 和 Setterreturn id;

qq_33807380的博客 1718

18、深入解析航空飞行数据中的秘密:从数据清理到高级分析

本文详细解析了如何使用R语言处理和分析航空飞行数据,从基础的数据清理到复杂的回归分析和机器学习模型构建。文章涵盖了探索性数据分析、天气数据的整合、地理信息可视化、时间序列预测以及航班延误的优化策略等内容,展示了如何通过数据挖掘技术提高航空运营效率和乘客满意度,并探讨了数据质量评估与隐私保护的重要性。

convnet3designer的博客 107

强化学习实战——OpenAI Gym环境配置+实战演示(win10)

遇到问题:无法安装pickle5原因是:python3.8与该包不兼容,必须降python3.7的版本。

LZL2020LZL的博客 4899

java实现百万级别数据导出excel(JPA,hibernate,mybatis三种方式)

java实现百万级别数据导出excel,提供了JPA,hibernate,mybatis三种不同的方式来实现

hgq0916的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java批量文件打包成压缩成zip下载和大量数据导出excel时的处理方法

对于我们来说,java导出数据成excel或其他数据文件,或者下载资源是开发中的家常便饭, 但是在导出的时候,如果点击一个按钮导出几百万条数据,如果不作处理的话很可能会出现一系列的问题. 这里介绍打包成zip压缩包下载 针对大量数据导出excel, 这里有几种办法: 1. 每到一定数量就分成一个sheet 2. 每到一定数量分成一个excel,压缩成zip包打包下载 3. 控制导出的数据量...

zzzgd_666的博客 7787

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java大量数据导出excel的几种优化方法

一、我们导出数据时,常常是将数据一次性全部加载到内存中来,进行数据处理和导出,这样很容易导致OOM,我们可以对大文件拆分成小文件进行保存,最后对所有临时文件进行打包导出或者对小文件进行merge。三、我们在查询一个表数据的时候,往往把表中的所有字段都查询出来了,有些表结构比较大的可能有100,200个字段,但是我们在实际导出excel的时候用的字段不超过10个,这样使用的内存将减少10倍左右,那我们就没有必要去查询出这么多字段,建立一个vo,查询出我们需要的字段,然后进行数据处理和导出。

JSUITDLWXL的博客 2894

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java批量文件打包成压缩成zip下载和大量数据导出excel时的处理方法_java 导出多文件数据并打成zip报 优化时间方案

@param size 每个excel的数据的行数。* @param zipfile 生成的zip文件对象。* @time 2018年6月25日11:47:07。* @time 2018年6月25日11:47:07。* @param rowCache 下载时缓存的行数。* @time 2018年6月25日11:47:07。* @param srcfile 要压缩的文件数组。* @param rowCache 缓冲的行数。* @param files 要打包的批量文件。

2401_84181911的博客 1532

java批量文件打包成压缩成zip下载和大量数据导出excel时的处理方法_java 导出多文件数据并打成zip报 优化时间方案(1)

@param size 每个excel的数据的行数。* @param zipfile 生成的zip文件对象。* @time 2018年6月25日11:47:07。* @time 2018年6月25日11:47:07。* @param rowCache 下载时缓存的行数。* @time 2018年6月25日11:47:07。* @param srcfile 要压缩的文件数组。* @param rowCache 缓冲的行数。* @param files 要打包的批量文件。

2401_84181481的博客 923

java excel导出工具类(大量数据)

代码: import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import ...

weixin_41905643的博客 232

es筛选数据并导出excel

@RestController public class ElasticSearchTestController { // 初始化Logger类:使用指定的类初始化 LoggerFactory,输出日志所在类的信息。 private static Logger logger = LoggerFactory.getLogger(ElasticSearchTestController.class); private static String IP = "es地址"; priv

weixin_44858201的博客 2862

java 导出成EXCEL或XML

java 导出成EXCEL或XML 源代码下载地址:http://www.zuidaima.com/share/1550463713774592.htm

springmvc_springdata的专栏 964

Java导出Excel工具类

依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.0.1</version> ...

zdj18166896501的博客 421

Poi数据导出到Excel示例

先上代码: 定义需要导出的实体类 @Data public class Student implements Serializable { private Integer id; private String studentName; private Integer age; private LocalDate birth; private Stri...

青藤光年的博客 437

Java怎么实现导出Excel

使用的工具类:org.jeecgframework.poi.excel.ExcelExportUtil 源码如下: public class ExcelExportUtil { private ExcelExportUtil() { } /** * @param entity * 表格标题属性 * @param poj...

睶 2015

Java 对象集合数据导出到Excel

导出类 package test; import java.io.FileOutputStream; import java.io.OutputStream; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import

zm博客 1万+

java导出带有复杂表头的Excel

前几天用layui框架做列表导出Excel的功能,但是发现复杂的表头无法使用自带插件导出,然后在搞了下面的代码,可以支持复杂的表头导出,直接作为工具类用就好了 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; impor...

goodtimealways的博客 3783

Java利用POI实现数据的Excel导出

package com.y9zb.web.util; import com.y9zb.core.SplitSet; import com.y9zb.core.TimeUtil; import org.apache.poi.hssf.usermodel.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax

码农书生 4107
上一篇: 一个Java程序员应该掌握的10项技能
下一篇: Eclipse快捷键 10个最有用的快捷键
dw_java08
博客等级 码龄15年 122粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值