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 ...
随机推荐
- Integer.parseInt()和Integer.valueOf()方法详解
1.Integer.parseInt(): public static int parseInt(String s) throws NumberFormatException { return par ...
- std::condition_variable(二)
#include <iostream> // std::cout #include <thread> // std::thread, std::this_thread::yie ...
- 第一次广搜!HDU1548--A Strange Lift
一上来看见题目就用了深搜(因为只会深搜)果断内存超限(据说时间也会超限)无奈只好开始用广搜 其实广搜的思路和深搜有很多类似的地方 不过实现的过程中用到了队列 因此有点难以理解(好吧我个人认为) 这题是 ...
- c#基础 第三讲
Random r = new Random(); string x, y; while (true) { ...
- if...else if...else和switch语句的注意点
java if...else if...else 语句 if 语句后面可以跟 elseif…else 语句,这种语句可以检测到多种可能的情况. 使用 if,else if,else 语句的时候,需要注 ...
- vue兄弟组件传值
vue中除了父子组件传值,父传子用props,子传父用$emit,有时候兄弟组件之间也需要传值 1. 先定义一个中间件,src下面新建self.js import Vue from 'vue'; le ...
- oracle导入sql文件
oracle导入sql文件: 1.进入到sql文件目录下,登录需要导入文件的用户 打开cmd,输入以下命令,进入oracle, sqlplus username/password username:需 ...
- Spring Data 增删改查事务的使用(七)
@Modifying 注解使用 @Modifying 结合 @Query注解进行更新操作 咱们单单的一个查询注解是没有办法完成事务的操作的 我们还要结合一点就是@Transaction 在spring ...
- King's Game---hdu5643(约瑟夫环)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5643 约瑟夫环问题的原来描述为,设有编号为1,2,……,n的n(n>0)个人围成一个圈,从 ...
- git 常用文件目录介绍
生成的RSA公钥与密钥目录: C:\Users\***\.ssh 系统配置文件路径 C:\ProgramData\Git\ C:\Program Files\Git\mingw64\etc 全 ...