Как распаковать файл, упакованный PKZIP в мэйнфрейм на Java?
Я пытаюсь написать программу на Java, чтобы разархивировать файлы, заархивированные с помощью инструмента PKZIP в мейнфрейме. Тем не менее, я попробовал ниже 3 способов, ни один из них не может решить мою проблему.
От exe.
Я пытался открыть его с помощью команд WinRAR, 7Zip и Linux (unzip). Все не удалось с ниже сообщение об ошибке:
Архив находится в неизвестном формате или поврежден
По JDK API - java.util.ZipFile
Я также попытался разархивировать его с помощью API JDK, как описано на этом сайте. Тем не менее, это не с сообщением об ошибке:
Ошибка ввода-вывода: java.util.zip.ZipException: ошибка при открытии zip-файла
По Zip4J
Я также пытался использовать Zip4J. Это тоже не удалось, с сообщением об ошибке:
Вызывается: java.io.IOException: отрицательное смещение поиска в java.io.RandomAccessFile.seek(собственный метод) в net.lingala.zip4j.core.HeaderReader.readEndOfCentralDirectoryRecord(HeaderReader.java:117) ... еще 5
Могу ли я спросить, может ли какая-либо команда java lib или linux извлечь zip-файл, заархивированный PKZIP в мейнфрейме? Большое спасибо!
1 ответ
Я успешно прочитал файлы, которые были сжаты с помощью PKZip в z/OS и перенесены в 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 (пропущенную через голову), чтобы вывести первые несколько байтов, чтобы увидеть, выглядит ли он как файл zip:
# xxd myfile.zip | head
0000000: 504b 0304 2d00 0000 0800 2c66 a348 eb5e PK..-.....,f.H.^
Первые 4 байта должны быть такими, как показано. Смотрите также запись в Википедии для zip-файлов.
Даже если первые 4 байта верны, если файл был обрезан во время передачи, это также может привести к повреждению файла сообщения.