Poi读取Excle报错 java.util.zip.ZipException: invalid stored block lengths
一:Poi读取Excle报错 java.util.zip.ZipException: invalid stored block lengths
系统中需要导出excle签收单,excle模板是预设好放在classpath下的(idea中resources目录),程序运行的时候,利用类加载器从classpath读取文件读成BufferedInputStream,然后利用 inputStream 实例化XSSFWorkbook对象
代码如下(web环境运行报错):
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(EXCEL_TEMPLATE);//此处从classpath下获取源文件,在web环境中所有的源文件都是被压缩在war包下的 XSSFWorkbook workbook = new XSSFWorkbook(inputStream ); //此处报错: java.util.zip.ZipException: invalid stored block lengths
关于poi读取excle的操作,在单元测试是没问题的!至于单元测试和正式代码的区别是单元测试是绝对路径获取文件,再将文件转化为fileinputstream,再用这个input实例化XSSFWorkbook对象。
代码如下(单元测试环境运行ok):
File fileTemplate = new File("D:/workspace/template.xlsx");//可以看见此处是绝对路径获取源文件
// 转化流
FileInputStream is = new FileInputStream(fileTemplate);
// 创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook(is);
//此代码运行ok
观察上述2段代码可发现,区别在于2 点,1):流的类型不同,2):一个源文件是被压缩,一个是没有被压缩
关于流类型不同这个点 ,实例化 XSSFWorkbook 对象 接收的参数 是 inputstream 这个抽象类的实例 ,而上述2段代码的流都是继承inputstream ,根据多态的思想,上述2段代码的入参都没问题!
那么问题产生的可能的原因就是 一个源文件是被压缩,一个是没有被压缩 了,毕竟报错信息是: java.util.zip.ZipException: invalid stored block lengths(无效的存储块的长度) 可能和压缩打war包有关,
于是我将war包解压,尝试打开classpath下的excle文件,发现打不开,文件损坏!
于是基本确定是maven install 打包的时候 导致文件压缩不可用的原因了!
于是maven中增加插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<version>2.6</version>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension> //xlsx结尾的文件不
</nonFilteredFileExtensions>
</configuration>
</plugin>
官网原话:To prevent corrupting your binary files when filtering is enabled, you can configure a list of file extensions that will not be filtered.
链接:https://maven.apache.org/plugins/maven-war-plugin/examples/adding-filtering-webresources.html
如此配置在web环境中就没问题了!
特意记录,主要是解决问题的思想重要。。。。。。。。。。
Poi读取Excle报错 java.util.zip.ZipException: invalid stored block lengths的更多相关文章
- 启动TOMCAT报错 java.util.zip.ZipException: invalid LOC header (bad signature)
报错信息大致如下所示: at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect. ...
- [java bug记录] java.util.zip.ZipException: invalid code lengths set
1. 描述:将代码迁移到maven工程,其中用ZipInputStream读取/src/main/resources下的zip文件时报错:“java.util.zip.ZipException: in ...
- java.util.zip.ZipException: invalid entry size 解决办法
启动maven项目时报java.util.zip.ZipException: invalid entry size (expected 7612 but got 5955 bytes) 可能是mave ...
- java.util.zip.ZipException: invalid LOC header (bad signature)
Debug on Server(Tomcat 9) 遇到这个exception: SEVERE: A child container failed during startjava.util.conc ...
- java.util.zip.ZipException: invalid entry size
启动maven项目时报java.util.zip.ZipException: invalid entry size (expected 7612 but got 5955 bytes) 可能是mave ...
- java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature)异常解决方法
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com ...
- 使用NPOI读取Excel报错ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature
写了一个小程序利用NPOI来读取Excel,弹出这样的报错: ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature ...
- maven 项目在 tomcat 中启动报错:Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
问题原因: 在下载 maven 依赖包的时候出现某种原因导致下载的依赖包出现损坏,jvm 和 maven 不能正常识别,从而导致出现该问题. 解决办法: 在 maven 仓库中搜索: in-progr ...
- 重签名提示:无法对 jar 进行签名: java.util.zip.ZipException
使用jarsigner对APK重签名,提示:jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed ...
随机推荐
- Linux安装vsftpd
卸载vsftpd sudo yum remove vsftpd 安装vsftpd sudo yum -y install vsftpd 创建一个文件夹用来当作ftp得仓库 cd / sudo mkdi ...
- ng2-file-upload上传附件同时传参
由于业务需要,需要的场景是发某条公告的时候能够上传附件,不只是图片,图片的话可以直接用base64传给后台,但上传附件这个就不能这样干了, 与此同时,每条公告都有一个对应的唯一标识id, 附件以文件流 ...
- Linux下查看mysql路径
ps -ef|grep mysql
- Requset和Response中的乱码问题
在我们的日常开发中,乱码问题,还是比较经常遇到的,有时候是浏览器端提交的数据到后台乱码了,有时候是后台响应的数据到前台浏览器端展现出现乱码了.下面我们将通过几个简单的例子来说明乱码的由来和解决方式. ...
- 20165330 2017-2018-2 《Java程序设计》第5周学习总结
课本知识总结 第七章 内部类与异常类 内部类:类的一种成员 外嵌类:包含内部类的类称为内部类的外嵌类 二者关系: 内部类的外嵌类的成员变量在内部类中仍然有效,内部类中的方法也可以调用外嵌类中的方法. ...
- fastjson的deserializer的主要优化算法
JSON最佳实践 | kimmking's blog http://kimmking.github.io/2017/06/06/json-best-practice/ Fastjson内幕 Java综 ...
- If a cache file exists, it is sent directly to the browser, bypassing the normal system execution.
w开启缓存,缓存视图,用于后续请求. https://www.codeigniter.com/userguide3/overview/appflow.html http://codeigniter.o ...
- react 组件积累
material-ui material-table ant-design https://ant.design/docs/react/getting-started-cn 定义组件(注意,组件的名称 ...
- Python高级特性(1):Iterators、Generators和itertools(转)
译文:Python高级特性(1):Iterators.Generators和itertools [译注]:作为一门动态脚本语言,Python 对编程初学者而言很友好,丰富的第三方库能够给使用者带来很大 ...
- node.js---sails项目开发
http://sailsdoc.swift.ren/ 这里有 sails中文文档 node.js---sails项目开发(1)安装,启动sails node.js---sails项目开发(2)安装测试 ...