`
wangzjie
  • 浏览: 74764 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java Excel文件下载

阅读更多
import jxl.Workbook;   
import jxl.write.Label;   
import jxl.write.WritableSheet;   
import jxl.write.WritableWorkbook;   
  
public class ExcelDownload extends HttpServlet {   
  
    public void doGet(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
  
        // 生成xls   
        try {   
            Date d = new Date();   
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_kkmmss ");   
            String random = sdf.format(d);   
            String targetFile = random + ".excel";   
            response.setContentType("application/vnd.ms-excel");   
            response.addHeader("Content-Disposition",   
                    "attachment;   filename=\"" + targetFile + "\"");   
            OutputStream os = response.getOutputStream();   
            WritableWorkbook wwb = Workbook.createWorkbook(os);   
            // 新建一张表   
            WritableSheet wsheet = wwb.createSheet("record", 0);   
            // 设置表头   
            Label label = new Label(0, 0, "");   
            wsheet.addCell(label);   
            label = new Label(0, 0, "会员姓名");   
            wsheet.addCell(label);   
            label = new Label(1, 0, "卡号");   
            wsheet.addCell(label);   
            label = new Label(2, 0, "联系地址");   
            wsheet.addCell(label);   
            label = new Label(3, 0, "邮编");   
            wsheet.addCell(label);   
            label = new Label(4, 0, "联系电话");   
            wsheet.addCell(label);   
            label = new Label(5, 0, "手机");   
            wsheet.addCell(label);   
            label = new Label(6, 0, "Email");   
            wsheet.addCell(label);   
            label = new Label(7, 0, "性别");   
            wsheet.addCell(label);   
  
            wwb.write();   
            wwb.close();   
            os.close();   
            response.flushBuffer();   
  
        } catch (Exception e) {   
            System.out.println("生成信息表(Excel格式)时出错:");   
            e.printStackTrace();   
        }   
  
    }   
}  
 
使用servlet来下载文件,其原理非常简单,只要得到文件的输入流(或相应字节),然后写输出流即可。现就其中的几个细节问题展开:
1. MIME类型的设置:
Web 浏览器使用 MIME 类型来识别非 HTML 文档,并决定如何显示该文档内的数据。
例如EXCEL文件的 MIME 类型是 "application/vnd.ms-excel "。要用servlet 来打开一个 EXCEL 文档,需要将 response 对象中 header 的 contentType 设置成“application/vnd.ms-excel ”。
response.setContentType(contentType);

2. Content disposition
HTTP response header中的content-disposition 允许 servlet 指定文档表示的信息。使用这种header ,你就可以将文档指定成单独打开(而不是在浏览器中打开),还可以根据用户的操作来显示。
如果用户要保存文档,你还可以为该文档建议一个文件名。这个建议名称会出现在 Save As 对话框的“文件名”栏中。如果没有指定,则对话框中就会出现 servlet 的名字。
servlet 中,将 header 设置成下面这样:
response.setHeader("Content-disposition","attachment;filename="+ "Example.xls" );

response.setHeader("Content-Disposition", "inline; filename="fliename)
点击打开会在ie中打开。


需要说明的有三点:
Ø 中文文件名需要进行iso8859-1转码方可正确显示:
fileName = new String(fileName.getBytes("GBK"),"iso8859-1");
Ø 传递的文件名,需要包含后缀名(如果此文件有后缀名),否则丢失文件的属性,而不能自行选择相关程序打开。
Ø 有下载前询问(是打开文件还是保存到计算机)和通过IE浏览器直接选择相关应用程序插件打开两种方式,前者如上代码所示,后者如下:
response.setHeader("Content-disposition","filename="+ "Example.xls" );
3. 在研究文件的上传及下载过程中,有几点体会
程序的I/O操作往往是性能的瓶颈所在,java io定义了两个基本的抽象类:InputStream和OutputStream,对于不同的数据类型比如磁盘,网络又提供了不同的实现,java.io也提供了一些缓冲流(BufferedStream),使硬盘可以很快的读写一大块的数据, 而Java基本的I/O类一次只能读写一个字节,但缓冲流(BufferedStream)可以一次读写一批数据,,缓冲流(Buffered Stream)大大提高了I/O的性能。所以:
Ø小块小块的读写数据会非常慢,因此,尽量大块的读写数据
Ø使用BufferedInputStream和BufferedOutputStream来批处理数据以提高性能
Ø对象的序列化(serialization)非常影响I/O的性能,尽量少用
分享到:
评论

相关推荐

    java excel api

    Java Excel API,通常指的是jxl库,是一个广泛使用的开源Java库,用于读写Microsoft Excel文件。这个库使得在Java程序中处理Excel数据变得极其便捷,无论是读取现有的工作簿、创建新的工作簿,还是修改现有表格,jxl...

    java操作Excel文件

    在Java编程环境中,操作Excel文件是一项常见的任务,尤其在数据处理、数据分析或自动化测试等领域。本文将深入探讨如何使用Java来读取、写入和修改Excel文件,主要涉及的库有Apache POI和JExcelApi。 Apache POI是...

    java Excel文件转PDF文件

    在Java编程环境中,将Excel文件转换为PDF文件是一项常见的任务,尤其在数据报告或文档格式转换的场景下。本文将详细介绍如何使用Apache POI库处理Excel数据,以及使用iText库将这些数据导出为PDF格式。Apache POI是...

    java实现生成下载Excel

    在Java编程环境中,生成并提供Excel文件下载是一个常见的需求,特别是在数据处理、报表生成或数据分析的应用中。要实现这一功能,通常会用到Apache POI库,这是一个强大的API,允许Java程序员创建、修改和显示...

    Java生成Excel文件

    在Java编程中,生成Excel文件是一项常见的任务,特别是在数据处理、报表生成或导出功能中。本篇文章将深入探讨如何使用Java来创建Excel文件,并基于提供的标签“源码”和“工具”分享一些实用的方法。 首先,Java...

    java实现文件下载,并弹出保存对话框(Excel)

    本文将深入探讨如何使用Java实现文件下载,并在客户端弹出保存对话框,特别聚焦于Excel文件的处理,这在企业级应用中尤为常见。 ### Java实现文件下载的关键步骤 1. **设置HTTP响应头**:为了触发浏览器的下载行为...

    Java生成excel文件

    Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件Java生成excel文件

    java导出excel文件并且下载到客户端(包括解决中文乱码).txt

    ### Java导出Excel文件并下载到客户端(含解决中文乱码问题) 在现代的企业级应用开发中,数据导出功能是非常常见的一种需求。特别是在B/S架构的应用中,用户经常需要将查询结果导出为Excel文件以便进行后续的数据...

    java excel转html

    Java提供了多种库来实现这样的功能,这些库通常能够处理不同版本的Excel文件,包括32位和64位系统上的文件。 首先,我们需要了解Java中的主要库,如Apache POI和JExcelAPI,它们是用于读取和操作Excel文件的流行...

    java excel生成二维码(可以添加图标和文字).zip

    在本项目中,我们主要探讨如何使用Java技术栈,特别是SpringBoot框架,来生成包含二维码的Excel文件。这个压缩包提供了必要的代码示例,包括`qrcode.java`、`MatrixToImageWriter.java`和`LogoConfig.java`三个关键...

    Java中Excel转图片工具包(纯java)

    "Java中Excel转图片工具包(纯java)"就是这样一个解决方案,它实现了将Excel文件通过PDF中间格式转化为图片的功能。 首先,让我们了解一下这个工具包的工作原理。Excel文件本身并不直接支持转换为图片格式,但可以...

    java解析Excel文件并把数据存入数据库和导出数据为excel文件SpringBoot代码示例

    1、java解析读取excel文件中的数据,并写入数据库。 2、java读取数据库数据,并导出为excel文件。 3、README.md中有详细的操作步骤示例。 使用说明: 1. 先使用postman导入:other/excel相关.postman_collection....

    java导出excel(写入到excel后再下载)示例

    本示例资源提供了一个RAR压缩包,包含了实现这一功能的源代码,主要讲解了两个核心部分:一是如何将数据写入Excel文件并保存在本地,二是如何在Web环境中将数据库中的数据导出为Excel并允许用户下载。 首先,我们要...

    java 创建EXCEL文件,并向EXCEL中写入数据

    在Java编程环境中,我们经常需要处理数据的导入和导出,其中Excel文件是最常见的格式之一。本示例将介绍如何使用Java创建Excel文件并写入数据,主要涉及的库是`jxl`,这是一个用于读写Excel文件的开源Java库。 首先...

    java,Excel下载

    在Java编程中,导出带有头部标题行的Excel文件是一项常见的需求,特别是在数据处理和报表生成的场景下。本主题将深入探讨如何使用Java实现这一功能,主要关注两个关键类:`ExportUtils.java`和`ExportWrapper.java`...

    JAVA Excel模板POI导出并下载

    3. **创建输出流**:在服务器端,创建一个OutputStream,用于将生成的Excel文件输出到HTTP响应中。 4. **写入文件**:使用POI API将修改后的模板写入到OutputStream中。 5. **设置HTTP响应头**:设置合适的HTTP响应...

    java读取excel文件

    ### Java读取Excel文件知识点详解 #### 一、引言 在日常开发工作中,经常需要处理Excel文件。Java作为一种广泛使用的编程语言,提供了多种库来读取Excel文件,其中较为常用的有Apache POI和JExcelApi等。本文将详细...

    java动态大数据量EXCEL下载

    标题“java动态大数据量EXCEL下载”暗示了这个系统能够动态地根据用户的查询条件来生成Excel文件。这通常涉及到以下几个步骤: 1. **用户界面(UI)配置**:用户可以通过前端界面选择要查询的字段,这些字段可能是...

    java poi 根据excel模板生成excel文件

    在本文中,我们将深入探讨如何使用Java POI库根据已有的Excel模板生成新的Excel文件。 首先,理解“模板”在Excel中的概念非常重要。模板通常包含预设的格式、样式、公式和数据结构,可以作为创建新文件的基础。在...

Global site tag (gtag.js) - Google Analytics