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实现字节流与图片的转化
当有需求,需要把当天的报表文件发送给指定邮箱又不小生成多余的...实现过程是先将数据库里的数据,导出excel文件输出流中(注:不是直接生成文件),发送邮件时附件内容直接从前面excel文件输出流中获取,然后发送邮件
字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流...
Java字节流 .pdf 学习资料 复习资料 教学资源
Java字符流和字节流
一年前写过一个百万级别数据库数据生成配置xml文件的程序,程序目的是用来把数据库里面的数据生成xml文件.程序可以配置多少文件生成到一个文件中去。程序刚开始设计的时候说的是最多百万级别数据,最多50W数据生成到...
File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)、字符流(缓冲字符流、文件字符流、转换流、格式化输出流、字符数组流) 这份代码源码...
java操作excel数据的导入导出,java流的读取
图片转换成字节流先要转换的IMage对象,转换之后返回字节流。字节流转换成图片,要转换的字节流,转换得到的Image对象,根据图片路径返回图片的字节流,感兴趣的朋友看下下面的代码。 C#将图片和字节流相互转换代码...
Java IO字符流和字节流,讲述了字符传输流和字节传输流的不同和作用
Java中的字节流.
用poi读取excel多个sheet内容,用流的方式判断excel的版本,2003,还是2007版本,并附带所需jar包,文件下载后解压,直接导入eclipse中即可使用
JAVA 字符流与字节流
定义protobuf文件(包含enum,message,required,optional,repeated, 结构体定义中引用另一个结构体), 生成java文件,能够构建java对象,并转化为字节byte或者流,能够将流或字节转化为对象
本代码实现将JPG等图片文件转换为字节流并存储在TXT中,方便通信传输时将图片文件存储在数组中
NULL 博文链接:https://yuhuiblog695685688425687986842568269.iteye.com/blog/2433333
java字节流相关操作,int转换成byte字节数组,String转换为byte字节数组,bcd码转换。
Java实现字节流与图片的转化Java源码
ASM操作字节码,动态生成Java类class文件,模拟Spring的AOP实现原理。
javaIO操作各种文件,筛选文件,拷贝文件,上传下载,字符流和字节流都有,根据实际项目情况直接贴就可以了,根据文件类型选择不同的testclss就可以。全部使用效率最高的流