2021-04-25

java编译/打包完成后,导致Excel静态文件损坏,格式乱码问题

问题描述:

在项目中放置一个可供用户登录后下载的excel模版,项目在打包成功后,在target中直接打开excel,发现excel已经损坏。

问题原因:

项目在编译或者打包过程中,会对excel进行编译,这样经过文件filter过滤一遍之后,excel文件就损坏了。个人猜测问题源自于maven-resources-plugin这个插件。这个插件会把resources目录下的文本文件进行转码,但它无法正确的识别哪些是文本文件,因而会错误的将不需要进行转码的二进制文件也进行转码,导致这些二进制文件无法打开。目前一直有两种方法。

方法一:

	<resource>
		<directory>src/main/resources</directory>
		<filtering>true</filtering>
	</resource>

将原来的resource换成

	<resource>
	    <directory>src/main/resources</directory>
	    <excludes>
	        <exclude>**/*.xlsx</exclude>
	    </excludes>
	    <filtering>true</filtering>
	</resource>
	<resource>
	    <directory>src/main/resources</directory>
	    <includes>
	        <include>**/*.xlsx</include>
	    </includes>
	    <filtering>false</filtering>
	</resource>

第一段配置声明:在src/main/resources目录下,后缀是.xlsx的文件不是资源文件,其它的资源文件需要被过滤。而第二段配置声明:同样在src/main/resources目录下,后缀是.xlsx的文件是资源文件,但是不会被过滤。

配置完成后,如果重新编辑(打包)没有效果,需要maven claen 或者删除target文件重新编译一遍就可以啦,基本上我遇到的问题就解决了,如果还不行,试试讲项目删除,重新拉下再试。

方法二:
是在pom.xml中的maven-resources-plugin下,将不需要转码的文件扩展名填入nonFilteredFileExtensions

	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-resources-plugin</artifactId>
		<version>3.0.2</version>
		<configuration>
			<encoding>UTF-8</encoding>
			<nonFilteredFileExtensions>
				<nonFilteredFileExtension>xls</nonFilteredFileExtension>
				<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
			</nonFilteredFileExtensions>
		</configuration>
	</plugin>
上一篇:无法解析resourse中的方法getResourceAsStream


下一篇:request.getRequestURL()和request.getRequestURI()的区别