Добавить запись в существующий Zip-файл с помощью сжатия Apache без копирования всего существующего файла?

#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 не предлагает никакой помощи.