From 4dd1ce76042af162a34a5a09aebab477cbf20795 Mon Sep 17 00:00:00 2001 From: "kefan.qu" Date: Wed, 2 Sep 2020 17:09:40 +0800 Subject: [PATCH] fix(ExcelFileUtil): MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 针对于ExcelFileUtil工具类的修改建议: 1.PushBackInputStream回退流的markSupported()为false,并不支持mark和reset. 2.FileMagic.valueOf(InputStream in)判断了流的markSupported是否被支持,从而导致报错IOException. 3.使用FileMagic.prepareToCheckMagic(in)进行修改. --- .../cn/hutool/poi/excel/ExcelFileUtil.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelFileUtil.java b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelFileUtil.java index b1b1f6e07..f6952f582 100644 --- a/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelFileUtil.java +++ b/hutool-poi/src/main/java/cn/hutool/poi/excel/ExcelFileUtil.java @@ -1,14 +1,11 @@ package cn.hutool.poi.excel; +import cn.hutool.core.io.IORuntimeException; +import org.apache.poi.poifs.filesystem.FileMagic; + import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; -import java.io.PushbackInputStream; - -import org.apache.poi.poifs.filesystem.FileMagic; - -import cn.hutool.core.io.IORuntimeException; -import cn.hutool.core.io.IoUtil; /** * Excel文件工具类 @@ -26,9 +23,19 @@ public class ExcelFileUtil { * @return 是否为XLS格式的Excel文件(HSSF) */ public static boolean isXls(InputStream in) { - final PushbackInputStream pin = IoUtil.toPushbackStream(in, 8); + + /** + * {@link java.io.PushbackInputStream} + * PushbackInputStream的markSupported()为false,并不支持mark和reset + * 如果强转成PushbackInputStream在调用FileMagic.valueOf(inputStream)时会报错 + * {@link FileMagic} + * 报错内容:getFileMagic() only operates on streams which support mark(int) + * 此处修改成 final InputStream inputStream = FileMagic.prepareToCheckMagic(in) + * @author kefan.qu + */ + final InputStream inputStream = FileMagic.prepareToCheckMagic(in); try { - return FileMagic.valueOf(pin) == FileMagic.OLE2; + return FileMagic.valueOf(inputStream) == FileMagic.OLE2; } catch (IOException e) { throw new IORuntimeException(e); }