java 后台 Excel 文件生成后转化为字节流
java excel 使用 poi组件, HSSFWorkbook workBook = new HSSFWorkbook();
对于workBook生成字节流,很容易发现有个workBook .getBytes(),但是,是不可用的,下载以后打不开,
如果下载,正确的写法为
workBook.write(response.getOutputStream());
如果转化为字节流:
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
workBook.write(os);
ByteArray bytes = os.toByteArray();
String fileName = "xxx.xls";
response.reset();
response.setContentType("application/msexcel;charset=utf-8");
response.setHeader("Content-disposition", "attachment;filename= "+ fileName);
response.getOutputStream().write(bytes.getRawBytes());
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 上代码经过验证可行。
java excel 使用 poi组件, HSSFWorkbook workBook = new HSSFWorkbook();
对于workBook生成字节流,很容易发现有个workBook .getBytes(),但是,是不可用的,下载以后打不开,
如果下载,正确的写法为
workBook.write(response.getOutputStream());
如果转化为字节流:
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
workBook.write(os);
ByteArray bytes = os.toByteArray();
String fileName = "xxx.xls";
runData.getResponse().reset();
runData.getResponse().setContentType("application/msexcel;charset=utf-8");
runData.getResponse().setHeader("Content-disposition", "attachment;filename= "+ fileName);
runData.getResponse().getOutputStream().write(bytes.getRawBytes());
runData.getResponse().getOutputStream().flush();
runData.getResponse().getOutputStream().close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dwr的写法
:ByteArrayOutputStream os = new ByteArrayOutputStream();
try
{
hssfWorkbook.write(os);
return new FileTransfer(new String("XXXX.xls".getBytes(),"iso8859-1"), "application/ms-excel", os.toByteArray());
}
catch (IOException e)
{
e.printStackTrace();
}
这里,我们使用了ByteArrayOutputStream和ByteArrayInputStream类...处理的思想是,将HSSFWorkbook 写入ByteArrayOutputStream.然后用ByteArrayOutputStream来转换为字节流..然后再将字节流转换为ByteArrayInputStream ..至此,我们就在内存中将excel转换成了输入流..
代码如下
ByteArrayOutputStream os = new ByteArrayOutputStream();
try {
wb.write(os);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] b = os.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(b);
全部的代码太多,不贴上来了..相信大家都愿意用这个办法..因为使用之前说的那个产生随机文件名的办法.要繁琐的多...
总结
首先,我们必须明确我们所要实现的功能.我们在之前已经使用SHHF完成了excel的生成,现在的工作是将这个excel转换成输入流提供给struts2以实现下载...也就是说我们是要转换成输入流....
明确了目标以后,我们将开始设计...我们的思路是,先创建一个输出流,将这个excel写入到输出流里面,然后再通过这个输出流来得到我们所需要的输入流...这里我们尝试了两张办法.第一种,就是使用临时文件的办法.我们创建的输出流先将内容写入到临时文件里面,然后我们从临时文件里读取输入流.这个办法我们用到的是FileOutputStream 和FileInputStream.
但是临时文件的问题让程序变得异常复杂,所以我们的目标改成在内存中完成对excel到输入流的转换.所以我们用到了ByteArrayInputStream 和ByteArrayOutputStream .其实就是这么简单..
最后附上从Excel模板获得需要导出的EXCEL文件的输入流方法。
Java代码
1. public InputStream getExcelISForAs(List<Object> list) throws Exception {
2. InputStream excelStream = null;
3. FileInputStream fis = new FileInputStream(templatePath + "/template.xls");
4. HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(fis));
5. fis.close();
6. generateExcelForAs(list, wb);//填充EXCEL内容方法
7. ByteArrayOutputStream out = new ByteArrayOutputStream();
8. HSSFWorkbook hssWb = (HSSFWorkbook) wb;
9. hssWb.write(out);
10. excelStream = new ByteArrayInputStream(out.toByteArray());
11. out.close();
12. return excelStream;
13. }
相关推荐
如果需要在程序中操作图片,可以使用Java的`javax.imageio`包中的`ImageIO`类将字节流转换为`BufferedImage`对象: ```java BufferedImage image; try (InputStream is = new ByteArrayInputStream(imageData))...
+ FileOutputStream(FileDescriptor fdObj):创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。 在Java中,字节流是非常重要的概念,它们广泛应用于...
标题“字节流生成word文档”涉及到的是在Java编程中如何使用字节流技术来创建Microsoft Word(.doc或.docx)文件。字节流是Java IO中的一个重要概念,它用于处理二进制数据,如图像、音频、视频或者如Word文档这样的...
当有需求,需要把当天的报表文件发送给指定邮箱又不小生成多余的...实现过程是先将数据库里的数据,导出excel文件输出流中(注:不是直接生成文件),发送邮件时附件内容直接从前面excel文件输出流中获取,然后发送邮件
字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流...
在某些场景下,我们可能希望直接以流的形式处理Excel数据,而不是先将其保存为一个实际的文件,然后再作为附件发送。这样可以节省磁盘空间,提高效率。本文将详细介绍如何在Java中实现这个功能。 首先,我们需要...
### Java字符流和字节流详解 #### 一、引言 在Java中,I/O流主要用于处理输入输出操作,包括文件读写等。根据处理数据类型的不同,Java I/O流主要分为字节流和字符流两大类。字节流处理的是8位的字节数据,而字符流...
在Java编程中,字节流(Byte Stream)是处理数据的基本方式,特别是在处理二进制数据,如图片、音频或视频文件时。本教程将详细讲解如何使用Java实现字节流与图片之间的转换,这对于在网络上传输或者存储图片等二...
在Java编程中,处理Excel数据的导入和导出是一项常见的任务,特别是在数据分析、报表生成以及数据交换等场景。本文将详细讲解如何使用Java操作Excel数据,并重点探讨Java流的读取技术。 首先,Java中处理Excel文件...
本篇将深入探讨如何使用C#将图片文件转换为字节流,并将其存储在TXT文本文件中。 首先,我们需要理解字节流的概念。字节流是数据在计算机内存或磁盘间传输的基本单元,它可以是输入流(读取数据)或输出流(写入...
本文将详细解析"ByteIO_java_字节流_"这个主题,主要基于提供的`ByteIO.java`源代码文件,探讨字节流的基本概念、分类、常用类以及在实际应用中的实现。 首先,字节流被分为两类:输入流(InputStream)和输出流...
### Java IO字符流和字节流详解 #### 一、引言 在Java编程中,输入输出(简称IO)操作是十分重要的一个方面。通过IO操作,我们可以读取文件、网络数据、用户输入等,也可以将数据写入到文件、网络、控制台等。Java...
`Dir.class`和`Dir.java`是这次操作的核心文件,其中`Dir.java`包含了遍历目录的代码,而`Dir.class`是编译后的字节码文件,可以在命令行环境中直接运行。 首先,让我们了解`java.io.File`类。这是Java标准库中的一...
Java IO库设计时考虑到了字节流和字符流之间的转换,为此提供了两个桥接流:InputStreamReader和OutputStreamWriter。InputStreamReader将字节流转换为字符流,它需要一个字符集作为参数来解码字节;...
在Java编程语言中,输入/输出(I/O)操作是处理数据流的关键部分,而字符流与字节流则是实现这些操作的两种基本方式。理解它们的区别和应用场景对于任何Java开发者来说都是至关重要的。 ### 字节流 字节流是最基本...
图片转换成字节流先要转换的IMage对象,转换之后返回字节流。字节流转换成图片,要转换的字节流,转换得到的Image对象,根据图片路径返回图片的字节流,感兴趣的朋友看下下面的代码。 C#将图片和字节流相互转换代码...
- **获取文件字节流内容**:IExcel允许获取Excel文件内容的字节流,以便用户进行自定义操作。 2. **字段顺序问题与解决方案**: - **字段顺序的不确定性**:在某些情况下,由于JVM的内存对齐策略,Java字段的反射...
它们允许将Java对象转换为字节流,并从字节流中恢复对象。 5. **ZipInputStream** 和 **ZipOutputStream**:用于处理ZIP压缩格式的文件,可以读取和写入多个压缩过的条目。 6. **GZIPInputStream** 和 **...
一年前写过一个百万级别数据库数据生成配置xml文件的程序,程序目的是用来把数据库里面的数据生成xml文件.程序可以配置多少文件生成到一个文件中去。程序刚开始设计的时候说的是最多百万级别数据,最多50W数据生成到...