【java-POI】如何将一个WorkBook转为一个InputStream?
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 | /** * 利用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()接口重置下,否则第二次读取时会报异常,提示文件内容是空的,因为第一次读时已经读到了文件尾,再往下读时已经无数据可读了。
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)