java解压zip文件时,ZipFile zip = new ZipFile("D:/abc.zip");报错:error in opening zip file,求解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java解压zip文件时,ZipFile zip = new ZipFile("D:/abc.zip");报错:error in opening zip file,求解相关的知识,希望对你有一定的参考价值。

D:/abc.zip 可正常打开

你先确定你的ZIP有没有问题,再一个,如果你这个文件是刚生成的,确认一下,流有没有关闭。
流非正常关闭,有可能打不开追问

请不要复制别人的原话,

追答

之所以复制,是因为它就是这个原因
当然了,如果你的代码很特别的话,能把它贴上来么

追问

代码我贴到楼下的追问里了,还有zip文件不是生成的,是我手动压缩的一个可以正常打开的zip文件

追答

好吧,看到你的手动压缩我大概明白了。
手动压缩的话,生成的肯定是rar文件吧?
是你自己改成zip的吧?
你可以去网上随便下载一个zip文件,估计就没问题了

最后,亲,如果可以,那就是我没回答错,而是我第一次说的,你的zip文件有问题

追问

最后,找到了原因,1.我手动压的那个文件的确像你说的,rar改为zip,我以为可正常打开就可以代码正常解压。2.我还试了一种自己压缩然后再解压的,最后原因是压缩时ZipEntry entry = new ZipEntry("");传的参数没有值,导致可以压缩但损坏,所以解压失败,正因为这样我一开始就以为是解压有问题,找问题找错了方向。最后,谢谢你的热心解答,不错

参考技术A 详细错误信息帖出来追问

java.util.zip.ZipException:error in opening zip file

参考技术B 把你的整个程序贴出来。追问

谢谢,还请指点

追答

经过测试,你这个程序没有问题,你要看看你这个压缩包是不是有问题,或者你从新打一个压缩包试试。你代码中一定要把异常捕获,而且要引入这些
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
是不是你没有捕获异常,你用try catch捕获一下。

参考技术C 我觉得可能是文件流的问题

通过zipfile解压指定目录下的zip文件

代码:

# -*- coding: utf-8 -*-
import os
import zipfile
import platform
import multiprocessing

# 解压后的文件夹与原来的zip文件同名且在相同目录下
# 确保windows下解压后的文件夹名不乱码
file_encoding = "utf-8"
if platform.system() == "Windows":
    file_encoding = "gbk"

# 将zip文件解压到其所在目录
def unzip(file):
    file_name, ext = os.path.splitext(file)
    if ext == ".zip":
        print unzip, file
        f = zipfile.ZipFile(file)
        f.extractall(path=file_name.encode(file_encoding)) # 通过path指定解压的路径


if __name__ == "__main__":
    path = raw_input("请输入要解压的zip文件所在目录: ")
    print 要解压的zip文件所在目录为:, path
    path = path.decode(‘utf-8‘)  # 不同的系统和平台有各自的编码 ,为了实现系统或平台之间的信息交互可能需要编码转换
    # 主要是为了兼容windows ,否则遇到中文路径 会出现 [Errno 2]

    # 切换到指定目录下
    os.chdir(path)
    file_list = os.listdir(path)  # 获取指定文件夹下的文件列表
    pool = multiprocessing.Pool() # 创建进程池
    pool.map(unzip, file_list)
    pool.close()
    pool.join()

 

以上是关于java解压zip文件时,ZipFile zip = new ZipFile("D:/abc.zip");报错:error in opening zip file,求解的主要内容,如果未能解决你的问题,请参考以下文章

Zipfile库解压zip文件

javazip压缩包过大解压失败

zip4j 2.x使用,Java实现文件压缩与解压,加密压缩,ZipParameters ZipFile使用

zip4j 2.x使用,Java实现文件压缩与解压,加密压缩,ZipParameters ZipFile使用

python用zipfile模块打包文件或是目录解压zip文件实例

zipfile模块