【java-POI】如何将一个WorkBook转为一个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()接口重置下,否则第二次读取时会报异常,提示文件内容是空的,因为第一次读时已经读到了文件尾,再往下读时已经无数据可读了。

 

posted on 2024-06-23 21:04  清清飞扬  阅读(13)  评论(0编辑  收藏  举报