最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java項(xiàng)目中“zip END header not found“錯(cuò)誤的解決方案

 更新時(shí)間:2025年06月05日 09:13:25   作者:李少兄  
在 Java 項(xiàng)目構(gòu)建或運(yùn)行過(guò)程中,開發(fā)者常會(huì)遇到 java.util.zip.ZipException: zip END header not found 錯(cuò)誤,這一異常通常與 JAR 文件損壞、下載不完整、編碼問(wèn)題或 Maven 依賴管理配置不當(dāng)有關(guān),本文給大家介紹了Java項(xiàng)目中“zip END header not found“錯(cuò)誤的解決方案

一、問(wèn)題本質(zhì):JAR 文件損壞或 ZIP 格式異常

1.1 ZIP 文件結(jié)構(gòu)簡(jiǎn)析

ZIP 文件由多個(gè) 條目(Entry) 組成,每個(gè)條目包含:

  • 本地文件頭(Local File Header):記錄文件元數(shù)據(jù)(如文件名、壓縮算法)。
  • 文件數(shù)據(jù)(File Data):實(shí)際壓縮后的文件內(nèi)容。
  • 中央目錄項(xiàng)(Central Directory Entry):匯總所有條目信息。
  • 結(jié)束標(biāo)記(END of Central Directory Record):標(biāo)識(shí) ZIP 文件的結(jié)尾。

當(dāng) ZipFile 或 ZipInputStream 在讀取 ZIP 文件時(shí)發(fā)現(xiàn) 缺失 END 標(biāo)記,便會(huì)拋出 ZipException。

1.2 常見觸發(fā)場(chǎng)景

場(chǎng)景描述示例錯(cuò)誤日志
JAR 文件損壞下載中斷或存儲(chǔ)異常導(dǎo)致文件不完整java.util.zip.ZipException: zip END header not found
編碼問(wèn)題中文文件名未使用正確字符集解析java.lang.IllegalArgumentException: MALFORMED
ZIP64 格式支持不足大文件超出標(biāo)準(zhǔn) ZIP 格式限制invalid zip64 extra data field size
依賴沖突多個(gè)版本的依賴共存導(dǎo)致類路徑?jīng)_突ClassCastException 或 NoClassDefFoundError

二、成因分析與解決方案

2.1 場(chǎng)景 1:JAR 文件損壞

成因

  • 網(wǎng)絡(luò)中斷:Maven 從遠(yuǎn)程倉(cāng)庫(kù)(如阿里云鏡像)下載 JAR 時(shí),因網(wǎng)絡(luò)波動(dòng)導(dǎo)致文件未完全寫入。
  • 鏡像倉(cāng)庫(kù)問(wèn)題:第三方鏡像倉(cāng)庫(kù)(如阿里云、華為云)提供損壞的 JAR 文件。
  • 磁盤空間不足:本地倉(cāng)庫(kù)目錄空間不足,導(dǎo)致文件寫入失敗。

解決方案

步驟 1:刪除本地倉(cāng)庫(kù)中的損壞文件

# Windows
rm -rf ~/.m2/repository/com/konghq/unirest-java/3.14.5/

# Linux/macOS
rm -rf ~/.m2/repository/com/konghq/unirest-java/3.14.5/

步驟 2:強(qiáng)制重新下載依賴

mvn dependency:purge-local-repository clean install -U

步驟 3:手動(dòng)下載并替換 JAR 文件

  • 從 Maven Central 獲取正確版本的 JAR 文件。
  • 替換到本地倉(cāng)庫(kù)路徑:
cp unirest-java-3.14.5.jar ~/.m2/repository/com/konghq/unirest-java/3.14.5/

驗(yàn)證校驗(yàn)值

使用 SHA1 校驗(yàn)文件完整性:

certutil -hashfile unirest-java-3.14.5.jar SHA1

2.2 場(chǎng)景 2:編碼問(wèn)題導(dǎo)致 ZIP 解析失敗

成因

  • ZIP 文件中的中文文件名使用 GBK 編碼,而 Java 默認(rèn)使用 UTF-8 解析。

解決方案

代碼示例:指定字符集解析 ZIP 文件

import java.io.FileInputStream;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class ZipHandler {
    public static void main(String[] args) throws Exception {
        String zipFilePath = "path/to/your/file.zip";
        try (FileInputStream fis = new FileInputStream(zipFilePath);
             ZipInputStream zis = new ZipInputStream(fis, Charset.forName("GBK"))) {  // 指定 GBK 編碼
            ZipEntry entry;
            while ((entry = zis.getNextEntry()) != null) {
                System.out.println("Entry: " + entry.getName());
                // 處理文件內(nèi)容...
            }
        }
    }
}

Maven 依賴管理

若需處理中文文件名的依賴(如 Spring Boot 項(xiàng)目),確保依賴的 JAR 文件本身無(wú)編碼問(wèn)題。

2.3 場(chǎng)景 3:ZIP64 格式支持不足

成因

  • 文件大小超過(guò) 4GB(ZIP 標(biāo)準(zhǔn)限制),導(dǎo)致使用 ZIP64 擴(kuò)展格式。
  • 舊版 JDK(如 Java 7)或 Maven 插件不支持 ZIP64。

解決方案

升級(jí) JDK

使用 Java 8 或更高版本,支持 ZIP64 格式:

# 檢查 JDK 版本
java -version

配置 Maven 支持大文件

在 settings.xml 中啟用 ZIP64 支持:

<systemProperties>
    <net.java.dev.jna.zip64.enabled>true</net.java.dev.jna.zip64.enabled>
</systemProperties>

使用 Apache Commons Compress

替代 java.util.zip,支持 ZIP64:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.21</version>
</dependency>

代碼示例

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipFile;

public class Zip64Handler {
    public static void main(String[] args) throws Exception {
        String zipFilePath = "path/to/large-file.zip";
        try (ZipFile zipFile = new ZipFile(zipFilePath)) {
            for (ZipArchiveEntry entry : zipFile.getEntries()) {
                System.out.println("Entry: " + entry.getName());
            }
        }
    }
}

2.4 場(chǎng)景 4:依賴沖突導(dǎo)致類路徑異常

成因

  • 多個(gè)依賴引入相同庫(kù)的不同版本(如 com.mashape.unirest:unirest-java 與 com.konghq:unirest-java)。
  • 依賴傳遞性導(dǎo)致版本不一致。

解決方案

排除沖突依賴

在 pom.xml 中顯式排除舊版依賴:

<dependency>
    <groupId>third-party-group</groupId>
    <artifactId>third-party-lib</artifactId>
    <version>1.0.0</version>
    <exclusions>
        <exclusion>
            <groupId>com.mashape.unirest</groupId>
            <artifactId>unirest-java</artifactId>
        </exclusion>
    </exclusions>
</dependency>

統(tǒng)一依賴管理

使用 dependencyManagement 強(qiáng)制版本一致性:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.konghq</groupId>
            <artifactId>unirest-java</artifactId>
            <version>3.14.5</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>com.konghq</groupId>
        <artifactId>unirest-java</artifactId>
    </dependency>
</dependencies>

三、高級(jí)技巧與最佳實(shí)踐

3.1 Maven 鏡像優(yōu)化

切換鏡像倉(cāng)庫(kù)

避免使用可能損壞的鏡像,優(yōu)先使用官方倉(cāng)庫(kù):

<mirrors>
    <mirror>
        <id>central</id>
        <url>https://repo1.maven.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
</mirrors>

鏡像覆蓋策略

若需使用第三方鏡像,建議覆蓋所有倉(cāng)庫(kù):

<mirror>
    <id>aliyunmaven</id>
    <url>https://maven.aliyun.com/repository/public</url>
    <mirrorOf>*</mirrorOf>
</mirror>

3.2 依賴校驗(yàn)工具

Maven Enforcer Plugin

禁止特定版本的依賴:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <id>enforce-banned-dependencies</id>
            <goals>
                <goal>enforce</goal>
            </goals>
            <configuration>
                <rules>
                    <bannedDependencies>
                        <excludes>
                            <exclude>com.mashape.unirest:unirest-java</exclude>
                        </excludes>
                    </bannedDependencies>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>

3.3 日志與調(diào)試

打印依賴樹

定位沖突依賴:

mvn dependency:tree

檢查文件完整性

使用 jar 命令驗(yàn)證 JAR 文件:

jar tf unirest-java-3.14.5.jar

四、總結(jié)

問(wèn)題類型原因解決方案
JAR 文件損壞網(wǎng)絡(luò)中斷、鏡像問(wèn)題刪除本地緩存,強(qiáng)制重新下載
編碼問(wèn)題中文文件名亂碼指定字符集解析 ZIP 文件
ZIP64 支持不足文件過(guò)大升級(jí) JDK,使用 Apache Commons Compress
依賴沖突多個(gè)版本共存排除舊版依賴,統(tǒng)一版本管理

以上就是Java項(xiàng)目中“zip END header not found“錯(cuò)誤的解決方案的詳細(xì)內(nèi)容,更多關(guān)于Java錯(cuò)誤zip END header not found的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java使用@Transactional時(shí)常犯的N種錯(cuò)誤

    java使用@Transactional時(shí)常犯的N種錯(cuò)誤

    @Transactional是我們?cè)谟肧pring時(shí)候幾乎逃不掉的一個(gè)注解,本文主要介紹了使用?@Transactional?時(shí)常犯的N種錯(cuò)誤,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java Swing實(shí)現(xiàn)JTable檢測(cè)單元格數(shù)據(jù)變更事件的方法示例

    Java Swing實(shí)現(xiàn)JTable檢測(cè)單元格數(shù)據(jù)變更事件的方法示例

    這篇文章主要介紹了Java Swing實(shí)現(xiàn)JTable檢測(cè)單元格數(shù)據(jù)變更事件的方法,結(jié)合完整實(shí)例形式分析了Swing實(shí)現(xiàn)JTable檢測(cè)單元格數(shù)據(jù)變更事件過(guò)程中出現(xiàn)的問(wèn)題與相關(guān)解決方法,需要的朋友可以參考下
    2017-11-11
  • Java手寫圖書管理基本功能附代碼

    Java手寫圖書管理基本功能附代碼

    隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,計(jì)算機(jī)應(yīng)用的普及,利用計(jì)算機(jī)對(duì)圖書館的日常工作進(jìn)行管理勢(shì)在必行,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)圖書管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2022-04-04
  • Mybatis加載策略的實(shí)現(xiàn)方法

    Mybatis加載策略的實(shí)現(xiàn)方法

    Mybatis中一對(duì)一,一對(duì)多,多對(duì)多關(guān)系的配置及實(shí)現(xiàn),可以實(shí)現(xiàn)對(duì)象的關(guān)聯(lián)查詢。實(shí)際開發(fā)過(guò)程中很多時(shí)候我們并不需要總是在加載用戶信息時(shí)就一定要加載他的訂單信息,這是就是我們常說(shuō)的延時(shí)加載,本文給大家詳細(xì)介紹實(shí)現(xiàn)方法,一起看看吧
    2022-02-02
  • MyBatis入門初體驗(yàn)之使用大全(2)

    MyBatis入門初體驗(yàn)之使用大全(2)

    這篇文章主要介紹了MyBatis入門初體驗(yàn)之使用大全(2)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • 詳解SpringBoot中Session超時(shí)原理說(shuō)明

    詳解SpringBoot中Session超時(shí)原理說(shuō)明

    本篇文章主要介紹了詳解SpringBoot中Session超時(shí)原理說(shuō)明,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 關(guān)于Java中的klass和class

    關(guān)于Java中的klass和class

    這篇文章主要介紹了關(guān)于Java中klass和class的區(qū)別,vm加載的字節(jié)碼,也就是.class文件,被加載到方法區(qū)里面,叫Kclass,是一個(gè)C++對(duì)象,含有類的信息、虛方法表等,需要的朋友可以參考下
    2023-08-08
  • Spring?Data?JPA命名約定查詢實(shí)現(xiàn)方法

    Spring?Data?JPA命名約定查詢實(shí)現(xiàn)方法

    這篇文章主要為大家介紹了Spring?Data?JPA命名約定查詢實(shí)現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • SpringBoot項(xiàng)目打jar包與war包的詳細(xì)步驟

    SpringBoot項(xiàng)目打jar包與war包的詳細(xì)步驟

    SpringBoot和我們之前學(xué)習(xí)的web應(yīng)用程序不一樣,其本質(zhì)上是一個(gè) Java應(yīng)用程序,那么又如何部署呢?這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目打jar包與war包的詳細(xì)步驟,需要的朋友可以參考下
    2023-02-02
  • springMVC框架下JQuery傳遞并解析Json數(shù)據(jù)

    springMVC框架下JQuery傳遞并解析Json數(shù)據(jù)

    json作為一種輕量級(jí)的數(shù)據(jù)交換格式,在前后臺(tái)數(shù)據(jù)交換中占據(jù)著非常重要的地位,這篇文章主要介紹了springMVC框架下JQuery傳遞并解析Json數(shù)據(jù),有興趣的可以了解一下。
    2017-01-01

最新評(píng)論

彩票| 班戈县| 于田县| 团风县| 山阴县| 大兴区| 天镇县| 东阳市| 江都市| 黑河市| 辛集市| 贵德县| 澳门| 芷江| 佳木斯市| 丰城市| 通榆县| 库车县| 华容县| 竹溪县| 临朐县| 青河县| 红河县| 双辽市| 临沧市| 北碚区| 新泰市| 昌图县| 旺苍县| 沧州市| 宁都县| 个旧市| 哈巴河县| 新安县| 海盐县| 自贡市| 建昌县| 巩义市| 南皮县| 安化县| 岳池县|