一: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的更多相关文章

  1. 启动TOMCAT报错 java.util.zip.ZipException: invalid LOC header (bad signature)

    报错信息大致如下所示: at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect. ...

  2. [java bug记录] java.util.zip.ZipException: invalid code lengths set

    1. 描述:将代码迁移到maven工程,其中用ZipInputStream读取/src/main/resources下的zip文件时报错:“java.util.zip.ZipException: in ...

  3. java.util.zip.ZipException: invalid entry size 解决办法

    启动maven项目时报java.util.zip.ZipException: invalid entry size (expected 7612 but got 5955 bytes) 可能是mave ...

  4. java.util.zip.ZipException: invalid LOC header (bad signature)

    Debug on Server(Tomcat 9) 遇到这个exception: SEVERE: A child container failed during startjava.util.conc ...

  5. java.util.zip.ZipException: invalid entry size

    启动maven项目时报java.util.zip.ZipException: invalid entry size (expected 7612 but got 5955 bytes) 可能是mave ...

  6. java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature)异常解决方法

    java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com ...

  7. 使用NPOI读取Excel报错ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature

    写了一个小程序利用NPOI来读取Excel,弹出这样的报错: ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature ...

  8. maven 项目在 tomcat 中启动报错:Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)

    问题原因: 在下载 maven 依赖包的时候出现某种原因导致下载的依赖包出现损坏,jvm 和 maven 不能正常识别,从而导致出现该问题. 解决办法: 在 maven 仓库中搜索: in-progr ...

  9. 重签名提示:无法对 jar 进行签名: java.util.zip.ZipException

    使用jarsigner对APK重签名,提示:jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed ...

随机推荐

  1. java后台高德经纬度转地理位置信息

    import java.util.LinkedList;import java.util.List; import org.apache.http.HttpResponse;import org.ap ...

  2. Codevs 5914 [SXOI2016]最大值

    70分算法+30分打表 #include<ctime> #include<cstdio> #include<cstdlib> #include<algorit ...

  3. 《从零开始学Swift》学习笔记(Day 66)——Cocoa Touch设计模式及应用之通知机制

    原创文章,欢迎转载.转载请注明:关东升的博客 通知(Notification)机制是基于观察者(Observer)模式也叫发布/订阅(Publish/Subscribe)模式,是 MVC( 模型-视图 ...

  4. C#中字符数组,字节数组和string之间的转化

    转自:http://blog.csdn.net/wangxiaoqin00007/article/details/17675419 NDC(NetworkDiskClient)的界面和后台程序之间用S ...

  5. python基础-第六篇-6.2模块

    python之强大,就是因为它其提供的模块全面,模块的知识点不仅多,而且零散---一个字!错综复杂 没办法,二八原则抓重点咯!只要抓住那些以后常用开发的方法就可以了,哪些是常用的?往下看--找答案~ ...

  6. git从历史上的某一次提交处建立分支

    $ git log --oneline --all --graph --decorate * 1efcf18 (HEAD -> master) commit * 6a7ace8 commit * ...

  7. java-mybaits-00601-查询缓存-一级缓存、二级缓存

    1.什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存. 在操作数据库时需要构造 sql ...

  8. w命令

    命 令:w 功能说明:显示目前登入系统的用户信息. 语 法:w [-fhlsuV][用户名称] 补充说明:执行这项指令可得知目前登入系统的用户有那些人,以及他们正在执行的程序.单独执行w 指令会显示所 ...

  9. JVM类加载器工作流程

    类加载器 classloader:谈到类加载,不得不提的就是负责此项工作的类加载器classloader,classloader的职责是将Java源文件编译后的字节码文件加载到内存中去执行. 类加载至 ...

  10. Java基础知识陷阱(四)

    本文发表于本人博客. 今天我们来说说关于java继承以及反射有关的问题,大家先看下下面代码,试问可以编译通过不,为什么具体说说原因? public class Test{ public static ...