`
hekuilove
  • 浏览: 156384 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

POI检查EXCEL版本(2003或2007)

阅读更多
鉴定Excel格式是否是2003或2007,如果你的做法是读取扩展名,那说明你还是一个菜鸟!因为后缀完全是我们可以随意更改,我们可以把xls改成xlsx,甚至是txt,exe,jpg的后缀改成xlsx。

不过不管扩展名如何改变,文件的字节是改不了的,所以一般鉴定文件的真正格式应该读取byte,一般前几个字节都决定了文件的格式,这个是改不了的

读取Excel格式用不着如此麻烦了,我们完全可以借助POI提供的功能去鉴定。POI的Workbook提供了两个实现类,HSSFWorkbook(处理2003)和XSSFWorkbook(处理2007)

代码如下:

public static boolean isExcel2003(InputStream is) {
		try {
			new HSSFWorkbook(is);
		} catch (Exception e) {
			return false;
		}
		return true;
	}



public static boolean isExcel2007(InputStream is) {
		try {
			new XSSFWorkbook( is);
		} catch (Exception e) {
			return false;
		}
		return true;
	}


调用

public static void main(String[] args) throws IOException {
		String path ="C:\\Users\\QUINN\\Desktop\\template\\0.xlsx";
		File file = new File(path);
		InputStream is = new FileInputStream(file);
		System.out.println(FileHelper.isExcel2003(is));
		System.out.println(FileHelper.isExcel2007(is));
	}


以上调用的方法是错误的,如果文件真的是2007,则会两个都返回false,原因后面再说,先看看正确的写法。
public static void main(String[] args) throws IOException {
		String path ="C:\\Users\\QUINN\\Desktop\\template\\0.xlsx";
		File file = new File(path);
		System.out.println(FileHelper.isExcel2003(new FileInputStream(file)));
		System.out.println(FileHelper.isExcel2007(new FileInputStream(file)));
	}


后面这个才是正确的方式,前面的之所以不成功,那是因为在执行第一个方法isExcel2003的时候new了一个workbook,workbooknew完之后在POIFSFileSystem会有一个关闭流的操作,如图



当执行到isExcel2007的时候还是那个InputStream对象,但是对象已经在isExcel2003的方法里被close了,所以在后面的方法里始终是报错的。
  • 大小: 86.2 KB
2
0
分享到:
评论

相关推荐

    使用jaxb读取配置文件,并使用POI修改excel内容的例子

    项目中PTN健康检查报告内容不全,利用jaxb读取配置文件并用poi修改excel报表内容

    邮件发送 poi 二维码 条形码等java常用的工具类

    POIUtil:poi工具类,excel导出 QrCodeUtil:二维码操作工具, 包括生成和读取 ShellUtil:shell命令操作工具,包括linux登陆,命令执行...... 较为简单,具体需要自行扩充 SignUtil:签名工具,包括MD5 位运算 ...

    导出excel错误处理

    请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.UnauthorizedAccessException: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时...

    java 读取Excel的包和方法

    网上读取Excel,大多数都是poi,等到下了感觉回报异常,经过反复检查,发现缺一个包。里面包含所用的jar 和java文件。可以直接读取Excel2007

    使用Excel中创建图表

    * _XLChart_ChartPositionSet:您现在可以将图表移动到另一个Excel工作表或创建一个新的chartsheet(参数$ vXLC_Sheet) * _XLChart_COMError:现在返回@ AutoItVersion,@ AutoItX64,@编译,@ OSArch和@ OSVERSION,...

    excel-parser-spring-boot-starter:Excel解析器

    使用Apache POI库对API进行了抽象,并且通过使用Excel Parser,用户可以专注于编写业务逻辑。 同时支持DOM类型XSSFWorkBook和SAX类型XMLReader。 启动Spring Boot时,会提供实体元信息验证和循环依赖检查。 可以...

    填充Excel列表工具Excel2Entity.zip

    Excel2Entity实现了Java POI对xls文件的读取功能的封装,实现了批量导入Excel中的数据时自动根据Excel中的数据行创建对应的Java POJO实体对象的功能。 该类库也实现了在创建实体对象时对字段类型进行校验,...

    基于Java和Python的爬虫项目实战源码.zip

    POI读写Excel、Word、PPT文件 POI-HSMF读写Outlook POI-HDGF读写Visio POI-HPBF支持Publisher 其他文件 多媒体内容抽取: 抽取视频内容 视频内容一般分为四部分:帧、镜头、情节和节目 关键帧的提取---动态规则策略...

    mismatchfinder

    该程序用Java编码,使用Apache POI处理Excel(以及Calc)文件。 认为输入大小是n乘以m,n是个人数量,m是场所的数量。 该算法以线性方式进行,将同胞的基因组与母亲的基因组进行比较。 因此,它以最佳时间O(nm)...

    java在线考试系统.zip

    柴智:利用POI插件实现本地Excel批量上传题目到数据库题库。完成teacher类,管理员类的查看个人信息servlet方法。 8/7 9:00 方娇:实现了教师查看学生成绩;把所有的SQL语句修改封装到dao包;修改昨天遗留的错误。 ...

    Java范例开发大全 (源程序)

     实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209  实例140 按顺序创建文件 210  实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示文件中指定的字符 214  实例144 ...

    java范例开发大全(pdf&源码)

    实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例...

    java范例开发大全源代码

     实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209  实例140 按顺序创建文件 210  实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示文件中指定的字符 214  实例...

    java范例开发大全

    实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 215 实例...

    Java范例开发大全(全书源程序)

    实例139 利用POI读取Word文件中的内容 208 7.3 字符流 209 实例140 按顺序创建文件 210 实例141 按顺序读取文件 211 实例142 追加文件内容 211 实例143 只显示文件中指定的字符 214 实例144 读取jar包文件 ...

Global site tag (gtag.js) - Google Analytics