java 文件大数据Excel下载实例代码

时间:2021-07-11 08:23:58

java 文件大数据Excel下载实例代码

excel可以用xml表示。故可以以此来实现边写边下载文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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();
    }
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!