如何通过Java解压缩PKZIP在大型机中压缩的文件?

时间:2016-11-12 13:23:44

标签: java zip unzip mainframe pkzip

我正在尝试用Java编写一个程序来解压缩大型机中PKZIP工具压缩的文件。但是,我尝试了以下3种方法,但没有一种能解决我的问题。

  1. 通过exe。

    我试图通过WinRAR,7Zip和Linux命令(解压缩)打开它。 所有都失败,出现以下错误消息:

      

    存档格式未知或已损坏

  2. 通过JDK API - java.util.ZipFile

    我也试图通过JDK API解压缩它,如this website所述。 但是,它失败并显示错误消息:

      

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

  3. 通过Zip4J

    我也试过使用Zip4J。它也失败了,错误信息:

      

    引起:java.io.IOException:负搜索偏移   在java.io.RandomAccessFile.seek(本机方法)   在net.lingala.zip4j.core.HeaderReader.readEndOfCentralDirectoryRecord(HeaderReader.java:117)   ......还有5个

  4. 请问是否有任何java lib或linux命令可以解压缩大型机中PKZIP压缩的zip文件?非常感谢!

1 个答案:

答案 0 :(得分:4)

我已成功读取在z / OS上使用PKZip压缩并传输到Linux的文件。我能够用java.util.zip * classes:

读取它们
        ZipFile ifile = new ZipFile(inFileName);
        // faster to loop through entries than open the zip file as a stream
        Enumeration<? extends ZipEntry> entries = ifile.entries();  

        while ( entries.hasMoreElements()) {
            ZipEntry entry = entries.nextElement();
            if (!entry.isDirectory()) {  // skip directories
                String entryName = entry.getName();
                // code to determine to process omitted
                InputStream zis = ifile.getInputStream(entry); 
                // process the stream
            }
        }

jar文件格式只是一个zip文件,因此“jar”命令也可以读取这些文件。

与其他人一样,我怀疑该文件可能未以二进制形式传输,因此已损坏。在Linux上,您可以使用xxd实用程序(通过管道传输)转储前几个字节以查看它是否看起来像一个zip文件:

# xxd myfile.zip | head
0000000: 504b 0304 2d00 0000 0800 2c66 a348 eb5e  PK..-.....,f.H.^

前4个字节应如图所示。另请参阅the Wikipedia entry for zip files

即使前4个字节是正确的,如果文件在传输过程中被截断,也可能导致损坏的文件消息。