String fileId = request.getParameter("fileId"); AttachFileVO attachFileVO = new AttachFileVO(); attachFileVO.setFileId(fileId); AttachFileVO attachFile = applicationService.getAttachFile(attachFileVO); String fileName = attachFile.getFileName(); String formatFileName = CommonUtil.encodingFileName(fileName); if(attachFile!=null&&attachFile.getFileContent()!=null){ InputStream in = null; OutputStream os = null; try{ response.reset(); response.setContentType(attachFile.getFileType()); response.setHeader("Content-Disposition", "attachment;filename="+formatFileName); in = new ByteArrayInputStream(attachFile.getFileContent()); byte[] buffer = new byte[1024]; os = response.getOutputStream(); while (in.read(buffer) > 0) { os.write(buffer); } }catch(Exception ex){ throw ex; }finally{ if(in!=null){ in.close(); } if(os!=null){ os.close(); } } return null; }
上面写法下载docx报错,更改:
in = new ByteArrayInputStream(attachFile.getFileContent()); byte[] buffer = new byte[1024]; os = response.getOutputStream(); int len = 0; while ((len = in.read(buffer)) > 0) { os.write(buffer, 0, len); }
意思是将buffer里面0~len的字节写到输出流里面,下载的文件转换成字节流的字节数一般是不能被1024整除的,当输出最后一部分字节的时候,可能没有1024个字节,那么buffer字节数组里多出来的位置就是初始值0,这些也写到输出流里面去了,也就是多写了很多个值为0的字节进去,所以格式不对。
相关推荐
以下是对标题"java文件流操作.docx"和描述中提到的知识点的详细说明: 1. **字节流(Byte Stream)**: Java中的`InputStream`类用于处理字节流,它提供了一种按字节读取文件内容的方式。`FileInputStream`是`...
在 Linux 系统中搭建 Java 开发环境.docx 在 Linux 系统中搭建 Java 开发环境.docx 在 Linux 系统中搭建 Java 开发环境.docx 在 Linux 系统中搭建 Java 开发环境.docx 在 Linux 系统中搭建 Java 开发环境.docx 在 ...
`java.io.File`类是Java中用来操作文件和目录的基石。它可以用来创建、删除、重命名文件,以及查询文件属性。对于文件内容的读写,Java IO流提供了`FileReader`和`FileWriter`,它们分别是字符流的节点流,用于读写...
10 IO重10 IO11重定向.docx.docx10 IO重定向.docx
Java的IO流是Java编程中用于处理输入输出操作的核心机制。在Java中,流是一组有序的数据序列,可以是字节或字符,用于在不同数据源之间传输数据。流主要分为两大类:输入流(Input Stream)和输出流(Output Stream...
Java进阶IO流讲义大全.docx
import java.io.*; public class DocToDocxConverter { public static void main(String[] args) throws IOException { String sourceFilePath = "input.doc"; String targetFilePath = "output.docx"; // ...
在Java中,IO流被设计为一种通用的机制来处理数据的传输,无论是从文件、网络、设备还是内存。以下是对Java IO流的详细总结: 一、流的分类 1. 按流的方向:Java IO流分为输入流(InputStream和Reader)和输出流...
本篇文章将深入探讨如何使用Java结合docx4j库来创建和操作Microsoft Word的.docx文件。docx4j是一个强大的开源Java库,专门用于读写Open XML格式的文档,包括.docx、.xlsx和.pptx等。 首先,我们来看docx4j的基本...
Java IO 流是Java平台中的核心概念之一,用于在不同数据源之间传输数据,例如从文件到内存,从网络到磁盘等。在面试中,Java IO 流的知识点经常被问及,因为它涉及到文件操作、网络通信以及数据处理等多个方面。 ...
【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师面试题】Java高级工程师简历表格.docx【高级工程师...
《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)》教学大纲.docx《面向对象程序设计实践(Java)...
Java IO流是Java编程语言中处理输入输出的重要机制,它允许程序与外部设备(如硬盘、内存、网络等)之间交换数据。2022年的Java IO流学习总结主要涵盖以下核心知识点: 1. **流的概念**:流是数据传输的抽象概念,...
import java.io.*; public class DocToDocxConverter { public void convertDocToDocx(String docFilePath, String docxFilePath) throws IOException { // 读取.doc文件 FileInputStream fis = new ...
STM32_IO口操作.docx
冲击动力学仿真模型:流固耦合模型.docx 冲击动力学仿真模型:流固耦合模型all.docx 冲击动力学仿真模型:流固耦合模型v1.docx 冲击动力学仿真模型:流固耦合模型_1.冲击动力学仿真模型的概述.docx 冲击动力学仿真...
Delphi 编程技术与java,php,net.C++编程语言的对比.docx.zipDelphi 编程技术与java,php,net.C++编程语言的对比.docx.zipDelphi 编程技术与java,php,net.C++编程语言的对比.docx.zipDelphi 编程技术与java,php,...
..Java.ti11me.docx
综上所述,Java的IO流提供了一套完整的API来处理文件和网络等输入输出操作。了解各种流的特点及其使用方法对于开发高质量的应用程序至关重要。通过合理选择合适的流类型和正确使用流的操作方法,可以有效提高程序的...
### Java高级特性 - IO流详解 #### 一、概述 Java 中的 I/O(输入/输出)流是 Java 语言中用于处理输入和输出数据的重要机制。它提供了一种灵活的方式来读取和写入数据,可以用于文件操作、网络通信、数据流处理等...