SpringBoot项目导出Excel报错?Unexpected record signature 0X9的两种修复方案

集成easyexcel实现excel表格增强.zip 立即下载

SpringBoot项目导出Excel报错?Unexpected record signature 0X9的深度剖析与根治方案

最近在重构一个老项目的报表导出模块时,我又一次遇到了那个熟悉的“老朋友”——Unexpected record signature: 0X9。这已经不是第一次了,每次接手一个基于Maven构建的SpringBoot项目,只要涉及到从resources目录读取Excel、PDF等二进制模板文件进行导出,这个错误就像个定时炸弹,总会在某个不经意的打包时刻被引爆。表面上看,这是一个文件损坏的错误,但深究下去,你会发现它直指Maven资源处理机制的核心。对于追求交付稳定性的团队来说,这类问题不彻底解决,就如同在代码里埋下了隐雷。今天,我们就来彻底拆解这个问题的成因,并给出几种不仅治标、更能治本的解决方案,让你从此告别这类令人头疼的构建期“幽灵错误”。

1. 问题根源:当Maven的“好心”办了坏事

要解决问题,首先得理解问题是如何产生的。很多开发者第一次遇到 Unexpected record signature: 0X9 时,第一反应往往是:我的Excel模板文件是不是损坏了?于是反复替换文件,但问题依旧。实际上,问题的罪魁祸首很可能不是你,而是项目的构建工具——Maven。

在SpringBoot项目中,我们习惯将各种配置文件、静态模板(如Excel、Word)放在 src/main/resources 目录下。Maven在构建项目(执行 mvn compile 或 mvn package)时,默认会对 resources 目录下的资源文件进行处理,这个过程称为资源过滤(Resource Filtering)。

资源过滤的本意是什么? 它的设计初衷非常有用:允许你在资源文件(如 .properties, .yml, .xml)中使用Maven属性(例如 ${project.version})或环境变量(例如 ${DB_URL}),在构建时,Maven会自动将这些占位符替换为实际的值。这对于实现不同环境的配置差异化至关重要。

然而,这个机制对所有资源文件一视同仁。当它遇到一个二进制文件(比如 .xlsx、.pdf、.jar、图片等)时,它依然会尝试打开文件,解析其中的内容,寻找 ${...} 这类占位符。问题就出在这里:

  1. 二进制文件被误读为文本:Maven以文本方式读取二进制文件,会破坏文件原有的字节结构。
  2. 无意义的“替换”:即使文件中没有占位符,这个读取过程本身也可能引入编码错误或改变特定字节。
  3. 签名损坏:对于Excel(.xlsx)文件,其本质是一个ZIP压缩包,文件头部有特定的魔数(Magic Number)或签名。Maven的过滤操作可能会意外修改文件开头的几个字节,导致签名从预期的 0X504B0304(PK头)变成了 0X9 或其他无效值,从而在Java代码(使用Apache POI等库)读取时抛出 Unexpected record signature: 0X9 异常。

注意:0X9 只是一个常见报错值,实际可能遇到 0X3C、0XEF 等,其本质都是文件头部的关键字节被篡改。

简单来说,Maven的资源过滤功能“污染”了你的二进制资源文件。理解了这一点,我们的解决思路就非常清晰了:告诉Maven,哪些资源文件需要过滤,哪些需要“原样”复制,保持字节级完整。

2. 方案一:精细化控制Maven资源目录(推荐)

这是最直接、最符合Maven设计哲学的方式。通过在 pom.xml 中显式配置 <resources>,我们可以对 src/main/resources 目录下的文件进行精细化管理。

2.1 基础配置:排除特定文件类型

核心思想是配置两个资源规则:

  • 规则一:处理大多数需要过滤的文本资源(如 .properties, .yml),但排除二进制文件。
  • 规则二:单独处理二进制文件,并明确关闭过滤。

以下是详细的 pom.xml 配置示例:

<build>
    <resources>
        <!-- 规则一:处理除二进制文件外的所有资源,并开启过滤 -->
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*</include> <!-- 包含所有文件 -->
            </includes>
            <excludes>
                <!-- 排除所有不需要过滤的二进制文件扩展名 -->
                <exclude>**/*.xlsx</exclude>
                <exclude>**/*.xls</exclude>
                <exclude>**/*.pdf</exclude>
                <exclude>**/*.zip</exclude>
                <exclude>**/*.jar</exclude>
                <exclude>**/*.png</exclude>
                <exclude>**/*.jpg</exclude>
                <exclude>**/*.gif</exclude>
                <exclude>**/*.ttf</exclude>
                <!-- 根据你的项目实际情况添加更多 -->
            </excludes>
            <filtering>true</filtering> <!-- 对此部分资源开启过滤 -->
        </resource>

        <!-- 规则二:单独处理被排除的二进制文件,并关闭过滤 -->
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <!-- 只包含之前被排除的二进制文件 -->
                <include>**/*.xlsx</include>
                <include>**/*.xls</include>
                <include>**/*.pdf</include>
                <include>**/*.zip</include>
                <!-- 确保与上面的excludes列表对应 -->
            </includes>
            <filtering>false</filtering> <!-- 关键:对此部分资源关闭过滤 -->
        </resource>
    </resources>
</build>

这个配置是如何工作的? Maven会按顺序处理 <resources> 列表中的每一个 <resource> 定义。第一个定义将除二进制文件外的所有文件复制到 target/classes 并执行过滤。第二个定义则专门寻找那些二进制文件,并将它们原封不动地复制到 target/classes。这样就保证了二进制文件的完整性。

2.2 进阶技巧:按目录隔离资源

如果你的项目结构比较清晰,更推荐的一种实践是将动态配置和静态资源物理分离:

src/main/resources/
├── config/          # 存放 .yml, .properties 等需要过滤的配置文件
├── templates/       # 存放 Excel, Word, PDF 等二进制模板文件
└── static/          # 存放图片、字体等前端静态资源

这样,你的 pom.xml 配置可以更加简洁和意图明确:

<build>
    <resources>
        <!-- 只对 config 目录下的文件进行过滤 -->
        <resource>
            <directory>src/main/resources/config</directory>
            <filtering>true</filtering>
        </resource>
        <!-- 原样复制 templates 和 static 目录 -->
        <resource>
            <directory>src/main/resources/templates</directory>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/resources/static</directory>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>

这种方式的好处是:

  • 一目了然:配置直接反映了目录结构,可维护性高。
  • 避免遗漏:新增的二进制文件只要放在 templates/ 或 static/ 下,就自动受到保护,无需修改 pom.xml。
  • 性能优化:Maven无需扫描所有文件来判断是否需要过滤,构建速度略有提升。

3. 方案二:使用Maven资源插件进行全局排除

如果你觉得在 <resources> 中配置排除列表过于繁琐,或者项目中有大量不同类型的二进制文件,另一种方式是使用 maven-resources-plugin 插件。这个插件提供了更全局的配置项来定义哪些文件类型应该被排除在过滤之外。

3.1 插件配置示例

在 pom.xml 的 <build><plugins> 部分添加如下配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>3.3.0</version> <!-- 建议使用较新版本 -->
    <configuration>
        <!-- 定义不需要进行资源过滤的文件扩展名列表 -->
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
            <nonFilteredFileExtension>xls</nonFilteredFileExtension>
            <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
            <nonFilteredFileExtension>zip</nonFilteredFileExtension>
            <nonFilteredFileExtension>jar</nonFilteredFileExtension>
            <nonFilteredFileExtension>png</nonFilteredFileExtension>
            <nonFilteredFileExtension>jpg</nonFilteredFileExtension>
            <nonFilteredFileExtension>gif</nonFilteredFileExtension>
            <!-- 继续添加其他需要保护的二进制文件扩展名 -->
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

3.2 方案对比与选择

为了更清晰地理解两种方案的差异和适用场景,可以参考下表:

特性维度方案一:配置 <resources>方案二:使用 maven-resources-plugin
控制粒度精细,可针对不同目录设置不同过滤规则相对粗放,全局性排除特定扩展名
配置位置pom.xml 的 <build><resources> 节点pom.xml 的 <build><plugins> 节点
可读性高,资源处理规则一目了然中,需要了解插件特定配置项
维护性新增目录或特殊规则需修改配置新增文件类型只需在列表中添加扩展名
适用场景项目资源结构复杂,需要差异化处理项目资源结构简单,只需全局排除一批二进制类型
与IDE集成通用Maven标准配置,所有IDE支持良好依赖插件,绝大多数IDE也支持良好

个人建议:对于大多数SpringBoot项目,我更推荐方案一,尤其是按目录隔离的方式。它更符合Maven的标准实践,配置意图清晰,不依赖额外插件,减少了团队新成员的理解成本。方案二可以作为补充,特别是当你接手一个遗留项目,其资源目录混乱,且包含大量不同扩展名的二进制文件时,用插件全局排除可能更快见效。

4. 方案三:彻底规避——改变资源加载方式

上述两种方案都是在Maven构建层面解决问题。我们还可以换个思路:不让这些敏感的二进制模板文件经过Maven的资源过滤流程。这里有几种进阶的实践。

4.1 将模板文件移出资源目录

这是最彻底的方案。既然Maven默认会对 src/main/resources 动手,那我们就把模板文件放到它管不到的地方。例如,在项目根目录下创建一个 templates 文件夹(与 src 平级)。

your-project/
├── external-templates/   # 新建的模板目录
│   ├── report-template.xlsx
│   └── contract-template.pdf
├── src/
│   └── main/
│       └── resources/    # 仅存放需要过滤的配置文件
└── pom.xml

然后,在代码中,使用绝对路径或相对于项目根目录的路径来加载这些模板。在SpringBoot中,你可以通过 @Value 注入一个配置项来指定这个外部目录:

# application.properties
template.dir=./external-templates/
@Service
public class ReportService {
    @Value("${template.dir}")
    private String templateDir;

    public void exportReport() {
        File templateFile = new File(templateDir + "report-template.xlsx");
        // 使用 FileInputStream 加载文件
        // ...
    }
}

优点:

  • 完全杜绝了Maven构建的干扰。
  • 模板文件与代码分离,便于单独管理和版本控制(比如放入不同的Git仓库)。

缺点:

  • 破坏了项目结构的“标准性”,可能给开发者带来困惑。
  • 部署时需要额外处理这些外部目录,确保它们存在于运行环境。

4.2 将模板作为依赖引入

对于跨项目共享的、版本化的模板,可以考虑将它们打包成一个独立的JAR文件,然后通过Maven依赖引入。在主项目中,通过 ClassLoader.getResourceAsStream() 从依赖的JAR包中读取资源。因为依赖JAR中的资源在构建时不会被主项目的Maven过滤,所以是安全的。

步骤简述:

  1. 创建一个单独的Maven项目,将模板文件放入其 src/main/resources。
  2. 打包该项目为 template-library.jar。
  3. 在主项目的 pom.xml 中引入此依赖。
  4. 使用 this.getClass().getClassLoader().getResourceAsStream(“/path/to/template.xlsx”) 读取。

这种方式适用于模板需要被多个服务复用,且有独立更新需求的场景。

5. 诊断与验证:如何确认问题已解决?

配置完成后,如何验证你的修改是否生效?盲目的打包测试是不够的,我们需要一些诊断手段。

5.1 检查构建输出

最直接的方法是查看Maven构建后,target/classes 目录下的文件。

  1. 执行 mvn clean compile。
  2. 找到 target/classes 目录下你的Excel模板文件。
  3. 使用二进制查看工具(如 hexdump 命令或 Notepad++ 的十六进制视图)打开原文件(src/main/resources/xxx.xlsx)和构建后的文件(target/classes/xxx.xlsx)。
  4. 对比文件开头几个字节。一个健康的 .xlsx 文件应以 PK(即十六进制 50 4B)开头。如果构建后的文件开头也是 PK,恭喜你,问题解决了。如果变成了 7B 24(即 {$ 的ASCII)或其他字符,说明过滤仍然在生效。

在Linux/macOS下,你可以使用命令行快速验证:

# 查看原文件头
head -c 4 src/main/resources/report.xlsx | xxd -p
# 应输出:504b0304

# 查看构建后文件头
head -c 4 target/classes/report.xlsx | xxd -p
# 如果也输出 504b0304,则成功

5.2 处理IDE(如IntelliJ IDEA)的“陷阱”

一个常见的坑是:你在命令行执行 mvn package 一切正常,但在IDE(如IntelliJ IDEA)里直接运行SpringBoot主类却依然报错。

这是因为IDEA有自己的构建和运行机制。默认情况下,IDEA可能使用它自带的编译器来编译项目和复制资源,这个过程可能不会完全遵循你 pom.xml 中的Maven资源过滤配置。

解决方案:强制IDEA将构建/运行操作委托给Maven。

  1. 打开 File -> Settings (Windows/Linux) 或 IntelliJ IDEA -> Preferences (macOS)。
  2. 导航到 Build, Execution, Deployment -> Build Tools -> Maven -> Runner。
  3. 找到并勾选 “Delegate IDE build/run actions to Maven” 选项。
  4. 点击 Apply 和 OK。

提示:勾选此选项后,你在IDEA中点击“运行”或“调试”,IDEA会调用真正的 mvn 命令来执行构建,从而确保所有Maven配置(包括资源过滤)都生效。代价是启动速度会比IDEA自带的构建系统稍慢一些。

完成这个设置后,再次在IDEA中运行你的应用,尝试导出Excel,错误应该就会消失了。

5.3 编写单元测试进行自动化验证

为了长期保证资源文件的完整性,可以编写一个简单的单元测试,在每次构建时自动验证关键模板文件。

import org.junit.jupiter.api.Test;
import org.springframework.core.io.ClassPathResource;
import java.io.IOException;
import java.io.InputStream;
import static org.junit.jupiter.api.Assertions.*;

class TemplateIntegrityTest {

    @Test
    void testExcelTemplateSignature() throws IOException {
        // 尝试从类路径加载模板文件
        ClassPathResource resource = new ClassPathResource("templates/report-template.xlsx");
        assertTrue(resource.exists(), "模板文件应存在于类路径中");

        try (InputStream is = resource.getInputStream()) {
            byte[] header = new byte[4];
            int read = is.read(header);
            assertEquals(4, read, "应能读取到文件头");
            // 验证是否为ZIP/PK头 (PK = 0x50, 0x4B)
            assertEquals(0x50, header[0] & 0xFF, "文件第一个字节应为0x50 (P)");
            assertEquals(0x4B, header[1] & 0xFF, "文件第二个字节应为0x4B (K)");
            // 对于.xlsx,第三、四个字节通常是 0x03, 0x04
            assertEquals(0x03, header[2] & 0xFF, "文件第三个字节应为0x03");
            assertEquals(0x04, header[3] & 0xFF, "文件第四个字节应为0x04");
        }
    }
}

这个测试会在构建阶段运行,如果某次配置错误导致模板被过滤破坏,测试将立即失败,从而在CI/CD流水线中提前发现问题。

回过头看,Unexpected record signature: 0X9 这个错误虽然令人沮丧,但其根源在于对构建工具行为理解的偏差。在微服务和CI/CD普及的今天,构建的可重复性和可靠性是基石。通过精确控制Maven的资源处理行为,我们不仅能解决眼前的报错,更能建立起对项目构建过程更精细的掌控力。下次当你把任何非纯文本文件放入 resources 目录时,不妨先想一想:它是否需要被过滤?如果答案是否定的,那么第一时间就通过配置保护好它,这远比事后调试来得高效。

UNEXPECTED INCONSISTENCY: RUN fsck MANUALLY 主要介绍了UNEXPECTED INCONSISTENCY: RUN fsck MANUALLY,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 立即下载

相关推荐

Dynamics 365从入门到精通:一站式掌握微软智能商业应用平台

很多新手学Dynamics 365时,容易陷入“死记功能”的误区,其实这款平台的核心价值不是“功能多全”,而是“能适配企业业务流程,通过生态集成提升效率”。先从具体业务场景入手,理解每个功能的实际价值;再通过生态集成拓展系统能力;最后通过开发实现定制化,满足企业的特殊需求。按照这个思路,新手不用害怕复杂,一步步落地实战,3个月就能从“入门”到“能独立负责项目”。如果在学习过程中遇到具体问题(比如部署报错、数据迁移失败),欢迎在评论区留言,我会结合实战经验帮你解答!

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1040

解决Unexpected record signature 0X9&&maven 资源过滤

我们有个需求是根据`excel`模版导出一个`excel`表。我们的项目是SpringBoot,所以理所当然的把这个模版文件放到了,`resources`文件夹中。但是在导出文件的时候却遇到了`invalid code lengths set`及`Unexpected record signature: 0X9`的错误。 maven 资源过滤

假女吖的博客 3240

Vivado Combinatorial Loop Alert问题 [DRC LUTLP-1]

Vvado综合和布局布线都通过了但是无法生成bit文件,提示Combinatorial Loop Alert,错误如下图。在RTL图中可以看到LUT的输出连接到了输入上,这个就是。在代码中我并未找到导致这种情况发生的地方,如果遇到类似的问题先检查自己的代码是不是存在组合逻辑连接出现了问题,如果没问题再考虑通过设置去解决问题。

伊丽莎白的学习之路 6031

java.util.zip.ZipException: Unexpected record signature: 0X9 方法getResourceAsStream()异常解决

方法getResourceAsStream()异常解决

weixin_56576835的博客 6105

【CAN通讯系列18】- NM在干什么?休眠唤醒

同时针对不同休眠或唤醒场景,网管报文的userdata有所区别,如何做到场景与网管报文内容一一映射,通常会定义另一帧报文,用来表明当前是哪个或哪几个唤醒条件或休眠条件满足。又或者如果用户发现汽车电量不充足了,那么会有充电需求,插枪充电,这时如果插上慢充枪,那么OBC会先被唤醒,识别出插枪行为及其慢充枪的连接状态,然后OBC唤醒BMS和其他相关的控制器进行充电。也就是说,通过对一个又一个整车功能和应用场景的详细分析,最终能够汇总出整车所有的休眠唤醒场景需求,通常会用一个表格来管理,俗称休眠唤醒表。

menghuyouyou的博客 1167

pynq-z2 HLS开发

定制Overlay一.用HLS生成一个定制IP功啊啊是合理的创建标题,有助于目录的生成如何改变是式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 一.用HLS生成一个定制IP ...

qq_38769280的博客 4156

EasyPoi读取word时报错java.util.zip.ZipException: Unexpected record signature: 0X9

场景:把word模板放入类路径目录下,程序读取word模板,填充数据,导出。 现象:报错java.util.zip.ZipException: Unexpected record signature: 0X9 解决方法:pom文件添加如下代码段,防止maven将其压缩,然后将项目运行生成的target目录删除,重启项目 <profile> <build> <resources> <resource> <directory&gt

yiyuanyu的博客 1万+

面向网络攻击行为可视化分析系统实现【WebSocket + 可视化】

本系统主要应用于网站运维管理,它解决了网站运维人员排查网络攻击行为复杂且繁琐等问题,提高了运维人员网络安全分析的效率和准确性。

oNew_Lifeo的博客 1620

解决一次java.util.zip.ZipException: Unexpected record signature: 0X9问题

公司往往要在父工程的pom.xml中统一项目的jar包版本,但如果在子模块的pom.xml中导入了同名、不同版本的jar包,会覆盖父工程传递的同名依赖。maven打包项目的时maven-resources-plugin插件会对资源文件中占位符进行替换 但部分文件可能不需要进行替换,例如:证书文件,Excel文件等这些文件处理后将不能使用。子模块会继承父工程的依赖,但并不是所有继承下来的依赖都有效、还能在子模块中使用。锁定之后,如果子模块中出现同名的依赖,以父工程传递的依赖(锁定的依赖)为准。

level_Tiller的博客 1760

DDR4 硬件设计笔记

DDR4-DRAM是第四代支持双倍数据读取,支持随机位置存取的静态存储器。DDR4-DRAM的工作原理。DDR之T拓扑和Fly-by拓扑。DDR的硬件设计。DDR4 PCB设计要点介绍。DDR4之PCB走线间距的串扰评估。DDR4之内存通道(channel)和内存列(rank)。

qq_26815321的博客 1万+

31、贝叶斯认知建模与隐马尔可夫模型:理论与应用

本文探讨了贝叶斯认知建模与隐马尔可夫模型(HMM)的理论基础及其在认知科学和神经科学中的应用。重点介绍了贝叶斯定理和HMM的基本原理,并结合实际案例,如情绪识别系统和脑机接口(BCI),展示了它们在处理复杂认知任务中的强大能力。文章还讨论了贝叶斯-HMM模型的技术细节、优势与局限性,以及未来的发展前景。

meat5的博客 141

问题解决 Caused by: java.util.zip.ZipException: Unexpected record signature: 0X9

但是通过 SpringBoot 提供的加载文件API或运行时动态获取却报错了。但是通过Path.get 直接加载文件绝对路径去访问的时候,却是正常的。代码是读取 resources下的docx文件,然后报错了。

深度 797

Windows 11 WSL2环境下OpenClaw部署的兼容性问题分析与解决方案研究

本文研究了OpenClaw在Windows 11 WSL2环境下的部署方案。WSL2通过无缝集成Linux与Windows系统,为OpenClaw提供了良好的运行环境,支持GPU加速和跨平台开发。文章详细分析了硬件配置要求(推荐8核CPU/16GB内存/NVMe SSD)、系统选择(Windows 11 Pro+Ubuntu 22.04)以及部署步骤,包括WSL2启用、Linux发行版安装、Python/Node.js/Redis等依赖配置。通过优化.wslconfig文件参数(如内存分

博客 2279

【RuoYi-Vue-Plus】问题笔记 04 - EasyExcel 导出 Excel 问题合集

EasyExcel 问题合集:Excel 填充文件导出二进制流,资源文件夹模板文件读取

MichelleChung的星球 6477

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SpringBoot项目导出Excel报错?手把手教你解决Unexpected record signature 0X9问题

本文详细解析了SpringBoot项目中导出Excel时遇到的'Unexpected record signature 0X9'错误,该问题通常由Maven资源过滤机制导致。文章提供了两种有效解决方案:通过pom.xml配置资源排除规则或使用Maven插件管理,确保二进制文件不被破坏,帮助开发者快速解决这一常见技术难题。

mongodb5scout的博客 181

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Springboot下载excel模板采坑记

excel

qq_17805707的博客 1908

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SpringBoot项目中Excel模板导出异常:Unexpected record signature 0X9的排查与解决

本文深入分析了SpringBoot项目中Excel模板导出时遇到的“Unexpected record signature 0X9”异常的根本原因,即Maven资源过滤机制破坏了二进制文件结构。文章提供了两种在pom.xml中配置的解决方案:精细控制资源过滤规则或使用maven-resources-plugin插件,并给出了避免IDEA运行与Maven打包差异的避坑指南,确保Excel模板等二进制资源在打包后完好无损。

weixin_28839439的博客 310

java.util.zip.zipexception_java.util.zip.ZipException:打开zip文件时出错

我面临同样的问题。我有一个zip压缩文件,java.util.zip.ZipFile无法处理,但WinRar解压缩就好了。我发现了article on SDN关于Java中的压缩和解压缩选项。我稍微修改了一个示例代码,以生成最终能够处理归档的方法。诀窍在使用ZipInputStream而不是ZipFile并在顺序读取zip档案。该方法也能够处理空的zip压缩文件。我相信你可以根据你的需要调整方法,...

weixin_39620065的博客 1402

java.util.zip.zipexception_如何解决java.util.zip.ZipException?

Whever I try to debug and deploy my android application (in Android Studio 0.9) I get the following error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.java.util.zip.ZipException:...

weixin_33609654的博客 1735

java.util.zip.ZipException

每个步骤都是一个解决方法 1.清理下maven,然后重新导入:eclipse—项目右键—run As—clean,然后项目右键—run As—Maven install,重启项目。 2.更新jar包:eclipse—项目右键—Maven—Update Project,重启项目。 3.找到tomcat工作空间下的jar包,全部删除,然后按照步骤2。 4.删除maven配置地址里的jar包,然...

simon 2696

【easyExcel】后端将模板文件写入流供前端下载报错,easyexcel下载模板文件出错

报错内容: Caused by: java.util.zip.ZipException: Unexpected record signature: 0X44535425 Caused by: org.apache.poi.openxml4j.exceptions.NotOfficeXmlFileException: No valid entries or contents found, this is not a valid OOXML (Office Open XML) file

chirp_CQ的博客 8370

【Java报错已解决】Java.util.zip.ZipException

在 Java 开发过程中,报错信息常常让人陷入困境,而“Java.util.zip.ZipException”就是一个可能会给开发者带来不少麻烦的报错。当遇到这个报错时,程序的正常运行可能会被打断,影响开发进度和项目的稳定性。那么,这个报错究竟是怎么产生的呢?又该如何快速有效地解决呢?本文将深入探讨“Java.util.zip.ZipException”报错,为大家提供详细的解决方案。

鸽芷咕的博客 1795

java下载文件成word

【代码】java下载文件成word。

m0_49382941的博客 1232
上一篇: FPGA时序约束实战:3种时钟约束场景详解(附代码示例)
下一篇: 天气预报API避坑指南:如何选择稳定可靠的免费接口(2023实测)
ruby5
博客等级 码龄15年 29粉丝 893原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值