Java如何在主机中解压PKZIP压缩文件?
How to unzip file zipped by PKZIP in mainframe by Java?
我正在尝试在 Java 中编写一个程序来解压缩由大型机中的 PKZIP 工具压缩的文件。但是,我尝试了以下3种方法,其中none可以解决我的问题。
通过exe.
我试过用 WinRAR、7Zip 和 Linux 命令(解压缩)打开它。
全部失败并显示以下错误消息:
The archive is either in unknown format or damaged
由 JDK API - java.util.ZipFile
我也试过 JDK API 解压,如 this website 所述。
但是,它失败并显示错误消息:
IO Error: java.util.zip.ZipException: error in opening zip file
通过 Zip4J
我也试过用Zip4J。它也失败了,错误消息:
Caused by: java.io.IOException: Negative seek offset
at java.io.RandomAccessFile.seek(Native Method)
at net.lingala.zip4j.core.HeaderReader.readEndOfCentralDirectoryRecord(HeaderReader.java:117)
... 5 more
请问有没有javalib或者linux命令可以在Mainframe中解压PKZIP压缩的zip文件?非常感谢!
我已成功读取在 z/OS 上使用 PKZip 压缩并传输到 Linux 的文件。我能够用 java.util.zip* 类:
阅读它们
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 实用程序(通过 head 传输)转储前几个字节以查看它是否看起来像一个 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 个字节正确,如果文件在传输过程中被截断,也可能导致文件损坏消息。
我正在尝试在 Java 中编写一个程序来解压缩由大型机中的 PKZIP 工具压缩的文件。但是,我尝试了以下3种方法,其中none可以解决我的问题。
通过exe.
我试过用 WinRAR、7Zip 和 Linux 命令(解压缩)打开它。 全部失败并显示以下错误消息:
The archive is either in unknown format or damaged
由 JDK API - java.util.ZipFile
我也试过 JDK API 解压,如 this website 所述。 但是,它失败并显示错误消息:
IO Error: java.util.zip.ZipException: error in opening zip file
通过 Zip4J
我也试过用Zip4J。它也失败了,错误消息:
Caused by: java.io.IOException: Negative seek offset at java.io.RandomAccessFile.seek(Native Method) at net.lingala.zip4j.core.HeaderReader.readEndOfCentralDirectoryRecord(HeaderReader.java:117) ... 5 more
请问有没有javalib或者linux命令可以在Mainframe中解压PKZIP压缩的zip文件?非常感谢!
我已成功读取在 z/OS 上使用 PKZip 压缩并传输到 Linux 的文件。我能够用 java.util.zip* 类:
阅读它们 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 实用程序(通过 head 传输)转储前几个字节以查看它是否看起来像一个 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 个字节正确,如果文件在传输过程中被截断,也可能导致文件损坏消息。