#java #zip #compression #7zip
Вопрос:
У меня есть проект, который использует Apache Compress для работы с файлами 7Zip и Zip. Я хочу иметь возможность добавить новую запись (или заменить существующую запись) в архив, но не могу найти никаких примеров того, как это сделать.
До сих пор я пытался использовать следующий код:
@Override protected void doSaveEntry( final String archiveFilename, final String entryName, final byte[] content) { try (ZipArchiveOutputStream archive = new ZipArchiveOutputStream(new FileOutputStream(archiveFilename, true))) { log.trace("Creating archive entry"); final ZipArchiveEntry archiveEntry = new ZipArchiveEntry(entryName); archiveEntry.setSize(content.length); log.trace("Adding entry to archive"); archive.putArchiveEntry(archiveEntry); log.trace("Copying content to entry"); IOUtils.copy(new ByteArrayInputStream(content), archive); archive.closeArchiveEntry(); archive.finish(); } catch (IOException error) { log.trace("Failed to add entry to archive", error); } }
Но все это приводит к удалению центрального каталога архива, чтобы в нем отображался только новый файл, а затем к невозможности повторного открытия файла с помощью сжатия.
Я пробовал гуглить и не нашел примеров, только другие искали то же самое решение, по крайней мере, последние 7 лет, и проект Compress не предлагает никакой помощи.