工作中遇到需要用poi解析导入的Excel文件的case,之前同事写的,我发现他做文件格式校验只是做了文件名后缀的解析。这样会有个问题,就是其他格式的文件是可以修改后缀的,这样就可以通过校验,做解析。虽然也有异常处理,但是我们无法定位到这是因为文件格式不对抛的异常。所以我在网上查了下,发现一个校验方法,就是通过魔数(Magic Number)。最著名的魔数就是平方根倒数算法,雷神之锤:

i  = 0x5f3759df - ( i >> 1 ); 

我也不懂啥意思,先不管。我们平时写代码你在参数里突兀的直接用了字符串或者数字,编辑器提示你这是个魔法值,不规范。比如你算圆面积float r = 3.333; S=r^2*3.14;很明显这个3.14就是个魔数。但这些都跟我接下来写的东西没多少关系。

这里就不写原理了,网上有很多。我只贴出代码吧

util类:

import java.io.BufferedInputStream;
import java.io.InputStream;
import java.util.Objects;import lombok.extern.slf4j.Slf4j;
import org.apache.poi.poifs.filesystem.FileMagic;@Slf4j
public class PoiReadUtil {public static boolean isExcelFile(InputStream is) {boolean result = false;try {FileMagic fileMagic = FileMagic.valueOf(new BufferedInputStream(is));if (Objects.equals(fileMagic, FileMagic.OLE2)|| Objects.equals(fileMagic, FileMagic.OOXML)) {result = true;}} catch (Exception e) {log.error("Exception when check the excel file:", e);return false;}return result;}
}

这篇写的有点水,不过测试过是可用的,像魔数这些概念,在.class字节码文件中也用到过。这里就不做深入探讨。

Magic Number 校验Excel文件(Java)相关推荐

  1. 利用POI读取excel文件(java)

    利用POI读取excel文件(java) 摘要:利用java读取excel文件,读取文件并获取文件中每一个sheet中的值. 一.需要提前导入的包: import java.io.File;impor ...

  2. java导入、导出Excel文件

    一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统.银行系统).或者是:我们已经习惯用Excel打印.这样在我们实际 ...

  3. java excel导入jsp_jsp页面导入excel文件的步骤及配置

    上传使用flash插件 需要jquery.uploadify.min.js,uploadify.css,poi-ooxml-3.8-20120326.jar等 jsp页面: margin:010px; ...

  4. java导出excel设置行高列宽_使用POI生成Excel文件,可以自动调整excel列宽

    //autoSizeColumn()方法自动调整excel列宽 importjava.io.FileOutputStream; importorg.apache.poi.hssf.usermodel. ...

  5. java写入excel文件poi

    java写入excel文件 java写入excel文件poi,支持xlsx与xls,没有文件自动创建 package com.utils;import java.io.File; import jav ...

  6. JAVA语言实现操作Excel文件

    导入excel相关 jar 包 java import jxl.*;import jxl.write.*; 读取Excel文件 javaimport java.io.File; public void ...

  7. 如何用Apache POI操作Excel文件-----如何用Apache POI 画一个离散图

    有的时候,我们需要Excel中的数据,通过一个图画,可视化的表现出来. 那么这个时候,应该如何做呢?现在就借花献佛,以Apache POI自己提供的一个例子为例,给大家演示一下POI的API 如何画图 ...

  8. java magic number_java的class文件的magic number, cafebabe

    java的class文件的前4个字节叫做magic number, 用来识别是否为java的class文件. package pkg; import java.io.File; import java ...

  9. java excel 导入 加校验_Java 利用POI进行excel文件导入时校验数据,并且追加错误批注...

    首先拿到前端file控件上传的excel文件,到后台接收!拿到excel这就不多说了网上很多demo的,下面直接说校验单元格追加批注信息的 private void setpz(Workbook wo ...

最新文章

  1. Spring使用Quartz配置调度事务
  2. wxWidgets:测试样品
  3. 常见的 HTTP 状态代码及原因
  4. Bootstrap 分页导航的尺寸
  5. python输出变量地址_Python——变量
  6. pytorch---之随机种子初始化
  7. 优先队列的优先级设置法
  8. 微信小程序报Cannot read property ‘setData‘ of undefined的错误
  9. opencv美颜磨皮
  10. JAVA毕设项目宠物店管理系统设计与实现(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
  11. matlab中采样点是什么意思,各种采样含义
  12. ug添加imachining变量_UG变量设置
  13. 笔记本计算机在桌面显示,笔记本电脑开机后不显示桌面该怎么处理
  14. Mac 清理垃圾工具 Clean My Mac破解版
  15. 四位电脑故障诊断卡使用说明
  16. Deepin系统Beyond Compare下载安装以及无法使用解决办法
  17. 【无标题】两个路由器不同网段互通
  18. Python数据分析项目-共享单车骑行数据分析
  19. 2019年3月WHQL认证最新申请流程
  20. MonoRail和WebForm,谁是瑞士军刀

热门文章

  1. 百度快照的SEO意义,别再跟风了
  2. 【渝粤教育】国家开放大学2018年春季 8664-22T文书档案管理 参考试题
  3. static,this,private关键字用法
  4. 库乐队历史版本怎么下载_苹果库乐队下载-库乐队app最新版下载V2.3.2-西西软件下载...
  5. 刷题记录汇总,备战实习
  6. 【LeetCode-1109】航班预订统计<Java版>
  7. 【HD 1869】六度分离
  8. SSH使用及协议分析。
  9. canvas在线画图
  10. centos7【防火墙】常用规则