【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()接口重置下,否则第二次读取时会报异常,提示文件内容是空的,因为第一次读时已经读到了文件尾,再往下读时已经无数据可读了。
浙公网安备 33010602011771号