背景
项目中遇到读取excel需求,本地测试直接使用FileInputStream可以读取到,生产环境使用getResourceAsStream报错Unable to recognize OLE stream
解决
首先对共性的问题进行解决。使用jxl读取excel,jxl本身读取xlsx不兼容,需要打开excel另存为xls,其次检查getResouce中路径是否有问题,都没有问题后发现pom打包后的target资源中excel打开直接显示为乱码,找到问题根源
maven 在打包过程中,会对静态文件进行压缩,导致文件无法识别。配置pom,影响不大的话直接设置不进行压缩,设置filtering为false即可
<build>
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
如果不想影响其他文件的话设置排除excel文件压缩
<build>
<finalName>${project.artifactId}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 防止maven打包时对excel类型文件进行压缩导致乱码不可读取 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
</build>
</project>