Я пытаюсь скопировать Zip из Zipinputstream
в Zipoutputstream
.Java: Zipinputstream to Zipoutputstream приводит к тому, что «подпись в конце-центральной директории не найдена» Ошибка
Я храню Zip как byte[]
в базе данных Oracle. Я использую Zipinputstream
для распаковки zip (позже я хочу отредактировать Zip), а затем поместите его в Zipoutputstream
, чтобы получить новый byte[]
и использовать этот массив, чтобы загрузить файл позже через ServletOutputStream
. Когда я создаю новый файл - без Zipinputstream
- он работает. Но когда я использую Zipinputstream
, я получаю сообщение об ошибке.
Вот мой код:
ZipInputStream zipInputStream = new ZipInputStream(new ByteArrayInputStream(fileFromDataBase),
Charset.forName("UTF-8"));
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ZipOutputStream zos = new ZipOutputStream(byteArrayOutputStream, Charset.forName("UTF-8"));
ZipEntry currentEntry;
byte[] buffer = new byte[8192];
while ((currentEntry = zipInputStream.getNextEntry()) != null) {
ZipEntry newEntry = new ZipEntry(currentEntry.getName());
zos.putNextEntry(newEntry);
int length;
while ((length = zipInputStream.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
}
//TO Object to download later the Zipfile from html page
paketDownloadTO = new PaketDownloadTO();
paketDownloadTO.setData(byteArrayOutputStream.toByteArray());
paketDownloadTO.setFileName(fileName);
zos.finish();
zipInputStream.close();
zos.close();
Почему? Просто скопируйте байты. Вам не нужно все это усложнение. – EJP
Поскольку мне позже нужно отредактировать zip (вставьте новые файлы, удалите некоторые и т. Д.). Но если простая копия не работает, я не могу ее отредактировать. – Sue