java 文件大数据Excel下载实例代码
excel可以用xml表示。故可以以此来实现边写边下载文件
package com.tydic.qop.controller; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.tydic.qop.vo.param.RealTimeReportParamVo; @Controller @RequestMapping(value = "/exportStream") public class testExportByStream { /* * 导出文件通过流 */ @RequestMapping(value = "/exportStream.html") @ResponseBody public String exportByStream(RealTimeReportParamVo params, HttpServletResponse response) throws Exception{ String fileName="接口统计分析"; response.reset(); response.setContentType("application/octet-stream;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".txt").getBytes(), "iso-8859-1")); ServletOutputStream out = response.getOutputStream(); BufferedInputStream bis = null; BufferedOutputStream bos = null; for(int i=0;i<1000000;i++){ String contentStr="aaa自己写的controller"+i+"\n"; System.out.println(contentStr); byte[] contentByte=(contentStr).getBytes(); InputStream is = new ByteArrayInputStream(contentByte); readWrite(is,out,bis,bos); } if (bis != null) bis.close(); if (bos != null) bos.close(); return null; } public void readWrite(InputStream is,ServletOutputStream out,BufferedInputStream bis,BufferedOutputStream bos){ try { bis = new BufferedInputStream(is); bos = new BufferedOutputStream(out); byte[] buff = new byte[2048]; int bytesRead; // Simple read/write loop. while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } bos.flush(); } catch (final IOException e) { e.printStackTrace(); } } }