通过POI魔数判断文件类型:
public static boolean isExeclFile(InputStream inputStream){ boolean res = false; try { FileMagic fileMagic = FileMagic.valueOf(new BufferedInputStream(inputStream)); if(Objects.equals(fileMagic, FileMagic.OLE2) || Objects.equals(fileMagic, FileMagic.OOXML)){ res = true; } } catch (IOException e) { e.printStackTrace(); } return res; }
以上是通过流读取文件头的魔数来校验文件类型。(可避免用户直接修改其他类型文件后缀为‘xls’或‘xlsx’)
注:系统默认保存格式如果是2003年版本的是xls格式,2007和2007年之后的版本是xlsx格式。
直接调用file.getInputStream()放入FileMagic.valueOf中会抛出mark/reset not supported异常。不是所有的流都可以使用mark()和reset()方法,但缓冲流可以。此代码以缓冲流来包装。