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環境中就沒問題了!

 

特意記錄,主要是解決問題的思想重要。。。。。。。。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM