Я пытаюсь использовать zlib
в Java (java.util.zip
) для архивирования файла, но не могу разархивировать файл после его создания. Я использую код ниже:
public static ByteArrayInputStream compress(InputStream inputStream, String targetFilePath) {
String fileName = new File(targetFilePath).getName();
try {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(byteArrayOutputStream);
zipOutputStream.putNextEntry(new ZipEntry(fileName));
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
byte[] buffer = new byte[1000];
int len;
while ((len = bufferedInputStream.read(buffer)) > 0) {
zipOutputStream.write(buffer, 0, len);
}
bufferedInputStream.close();
zipOutputStream.closeEntry();
return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
} catch (IOException ex) {
log.error("The file does not exist");
}
return null;
}
Когда я читаю файл sample.txt
и вводю его как InputStream для этого метода, он создает файл sample.zip
.
Однако, когда я пытаюсь открыть этот zip-файл с помощью команды unzip
, он не открывается с ошибкой ниже:
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of sample.zip or
sample.zip.zip, and cannot find sample.zip.ZIP, period.
Я пытался открыть zip-файл с помощью jar xvf sample.zip
, который работал и показал, что он содержитsample.txt
текстовый файл. Это работает, потому что команда jar
не ищет End-of-central-directory signature
в zip-файле.
Может ли кто-нибудь пролить свет на то, почему эта подпись отсутствует в zip-файле? Любая помощь в этом отношении высоко ценится.