java导出文件,输出响应字节数组

本文介绍了一种使用Java程序导出“工分池管理”Excel文件的方法,包括设置响应头防止中文乱码、设置内容类型及处置输出流等关键步骤。
ExportExcel exp = new ExportExcel("工分池管理", WorkpointsPool.class, 1);
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();  
exp.setDataList(list).write(byteArrayOut);
byte[] excelBytes= byteArrayOut.toByteArray();//文件字節數組
byteArrayOut.close(); 
exp.dispose();
//輸出response響應流
//防止中文亂碼
String fileName=new String("工分池管理.xls".getBytes("gb2312"),"iso8859-1"); 
response.reset();
response.setContentType("application/msexcel;charset=utf-8");//文件類型
response.setHeader("Content-disposition", "attachment;filename="+fileName);     
response.getOutputStream().write(excelBytes);
response.getOutputStream().flush();
response.getOutputStream().close();
### Java 文件导出使用流的实现方式 在Java中,文件导出通常涉及将数据写入到特定格式的文件并通过HTTP响应返回给客户端。对于Excel和PDF等复杂格式,可以借助第三方库来简化操作过程。 #### Excel 导出与下载 为了实现出色的数据处理能力以及高效的性能表现,推荐采用Apache POI库完成Excel文档创建工作[^1]。具体流程如下: - **准备阶段**:确保已导入必要的依赖项至构建工具配置文件(Maven或Gradle)。例如,在`pom.xml`中加入以下片段用于获取最新版本POI组件支持: ```xml <!-- Maven Dependency --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> ``` - **编写业务逻辑**:利用Servlet或者Spring MVC控制器接收前端请求参数,并调用服务层方法组装待输出的内容集合;随后实例化Workbook对象及其子类Sheet、Row、Cell表示表格结构单元格信息填充完毕之后保存成字节数组形式暂存于内存空间等待下一步骤传输。 - **设置HttpServletResponse头信息**:指定Content-Type属性表明即将发送二进制流而非HTML页面文本描述符;附加Content-Disposition字段告知浏览器应以附件模式打开目标资源并赋予默认命名规则便于用户识别存储位置。 - **执行写出动作**:最终通过OutputStream接口关联Response.getOutputStream()获得句柄指针指向网络连接另一端设备屏幕显示区域逐位拷贝临时缓存区内的全部记录直至结束标志到达为止即关闭链路释放占用资源。 ```java // 创建一个新的HSSFWorkbook对象代表整个工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Sample Sheet"); // 添加一些示例数据... for (int i = 0; i < 10; ++i) { Row row = sheet.createRow(i); Cell cellA = row.createCell(0); cellA.setCellValue("Item " + i); Cell cellB = row.createCell(1); cellB.setCellValue((double)(Math.random()*10)); } // 将workbook转换为byte数组以便后续作为response body的一部分发出 ByteArrayOutputStream bos = new ByteArrayOutputStream(); try{ workbook.write(bos); }catch(IOException e){ throw new RuntimeException(e.getMessage(),e); }finally{ try{bos.close();}catch(Exception ex){} } byte[] bytes=bos.toByteArray(); // 设置http response头部信息指示这是一个要被下载而不是在线查看的文件 response.setContentType("application/vnd.ms-excel"); String header="attachment; filename=\"sample.xls\""; response.setHeader("Content-Disposition",header ); // 获取output stream并将bytes写出去 OutputStream out=response.getOutputStream(); out.write(bytes); out.flush(); out.close(); ``` #### PDF 文档生成机制解析 除了电子表格之外,有时也需要提供便携式文档格式(PDF),这时可选用开源框架iText或是更轻量级的选择如Flying Saucer XSL-FO Renderer来进行布局渲染[^2]。下面给出一段基于iText7的核心代码样例演示怎样快速搭建起一份简单的报告样式模板供参考学习之用: ```java PdfWriter writer = new PdfWriter(new FileOutputStream("example.pdf")); PdfDocument pdfDoc = new PdfDocument(writer); Document document = new Document(pdfDoc); document.add(new Paragraph("Hello World")); document.close(); writer.close(); ``` 上述例子仅展示了基础功能特性,实际应用场景下往往还需要考虑更多细节方面的要求比如页眉/脚定制、图表嵌套展示等功能扩展点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王焜棟琦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值