首页 > 编程语言 >【java-POI】如何将一个WorkBook转为一个InputStream?

【java-POI】如何将一个WorkBook转为一个InputStream?

时间:2024-06-23 21:09:21浏览次数:28  
标签:outputStream java inputStream length getMessage POI new InputStream

    /**
     * 利用workBook创建一个输入流用于后续操作
     *
     * @return
     */
    private InputStream createInputSream() {
        if (inputStream != null) {
            try {
                inputStream.reset();
                return inputStream;
            } catch (Exception e) {
                log.error("inputStream.reset failed: {}", e.getMessage());
                throw new BadException(e.getMessage());
            }
        }

        try {
            var outputStream = new ByteArrayOutputStream();
            workBook.write(outputStream);
            outputStream.flush();
            var length = outputStream.toByteArray().length;
            log.info("bytes.length = {}", length);
            inputStream = new ByteArrayInputStream(outputStream.toByteArray());
            return inputStream;
        } catch (Exception e) {
            log.error("创建输入流失败: {}", e.getMessage());
            throw new BadException("创建文件输入流失败: " + e.getMessage());
        }
    }

  大体思路:workBook写入outputStream, 利用outputStream.toByteArray()取得二进制数据来初始化一个InputStream对象,获得一个可用的实例化对象。

另外:如果这个InputStream需要多次被读取,需要在下次使用前调用reset()接口重置下,否则第二次读取时会报异常,提示文件内容是空的,因为第一次读时已经读到了文件尾,再往下读时已经无数据可读了。

 

标签:outputStream,java,inputStream,length,getMessage,POI,new,InputStream
From: https://www.cnblogs.com/joeblackzqq/p/18263911

相关文章

  • java项目中的高并发处理
    在Java面试中,当被问及项目中的高并发处理时,你可以从以下几个方面来分享经验:1.项目背景介绍简要介绍项目的业务场景和功能,以及为什么需要高并发处理。2.并发量评估描述如何评估系统需要处理的并发量,包括用户量、请求频率等。3.系统架构设计解释为应对高并发,系统架构......
  • JavaScript与Go后端服务连接方法
    1.概述本文档描述了如何使用JavaScript(在浏览器或Node.js环境中)与使用Go语言编写的后端服务进行通信。我们将通过HTTP请求来实现前后端的数据交互。2.前提条件后端服务已经部署并运行在指定的URL上。JavaScript环境已经配置好,如果是Node.js,需要安装axios或fetch库。3.Go......
  • java使用@Controller注解跳转到thmyleaf页面时候报错
     报错如下######当我使用RestController时候接口可以得到返回的对象↓但是查看RestController和Controller的区别之后:也就是说@RestController返回的是一个对象,@Controller默认情况下,方法的返回值会被解析为一个视图名称,并寻找与该名称匹配的视图进行渲染。这意味着返回......
  • Java逐层解析JSON的内存占用分析
    哈喽,大家好,我是木头左!JSON对象与Java映射JSON对象是由键值对构成的无序集合,这在Java中通常由Map<String,Object>来表示。每个键值对都占用一定的内存空间,而Java的HashMap或TreeMap等实现会根据内部结构和存储的数据量来动态调整内存占用。JSON数组与Java列表JSON数组是由有......
  • Java项目:springboot汉服文化bbs商城系统(计算机毕业设计)
    作者主页:Java毕设网 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码一、项目介绍汉服文化bbs商城系统,主要分为前后台。共分两种角色:管理员与普通用户;管理员可登录前后台,普通用户仅可登录前台;普通用户登录后可发布、修改、删除自己的文章;前台主要......
  • 【面试宝典】28道Java集合高频题库整理(附答案背诵版)
    常见的集合有哪些?常见的Java集合可以分为两大类:Collection和Map。Collection接口下主要有以下几种实现:List:有序的集合,其中的元素可以重复。ArrayList:基于动态数组实现,查询速度快,但在中间插入和删除元素时速度较慢。LinkedList:基于双向链表实现,插入和删除速......
  • Leetcode150.逆波兰表达式求值(Java)
    题目:        给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。    栈的典型例题。题目要求为:求后缀表达式值。示例 1:输入:tokens=["2","1","+","3","*"]输出:9解释:该算式......
  • Java链表
    在Java中,链表是一种动态数据结构,它不需要在内存中分配一块连续的空间,而是通过指针将节点连接起来。链表由节点(Node)的集合组成,每个节点包含两部分内容:数据(data)和指向下一个节点的引用(next)。Java中常见的链表类型有单向链表、双向链表和循环链表:单向链表(SinglyLinkedList):每......
  • javascript浏览器对象模型
    BOM对象:BOM是浏览器对象模型的简称。JavaScript将整个浏览器窗口按照实现的功能不同拆分成若干个对象;包含:window对象、history对象、location对象和document对象等window对象:常用方法:1.prompt();显示可提示用户输入的对话框window.prompt("请输入您的名字");返......
  • Java语言常用注解(Annotation)收录
    Java语言常用注解(Annotation)收录注解(Annotation)是一种用于在代码中插入元数据的方式,以便为编译器、开发工具或运行时环境提供信息。自Java5引入以来,注解已成为Java平台不可或缺的一部分,用于各种场景,如编译时检查、框架集成、依赖注入等。下面收录了一些开发过程中常用......