Никто действительно не ответил на оригинальный вопрос Why?
, ответы просто содержат советы, как все еще это сделать.
Так почему?
Файлы jar и zip представляют собой сжатые файлы, имеющие набор файловили директора, обычно называемые записи .Структура / формат файлов jar / zip - это последовательное перечисление записей (кроме заголовка формата файла zip).
Каждая запись имеет заголовок, который содержит информацию о записи, например, ееимя, тип, его длина в байтах (и другие).
Теперь, взяв этот последовательный список записей, как бы вы удалили запись из середины файла?Это оставило бы "дыру" в середине файла.Единственный способ удалить запись (без необходимости повторного создания архива без удаляемой записи) - это скопировать содержимое файла zip, начиная с записи, до начала текущей (удаляемой) записи, а также обрезать файл zip.длина по длине удаленной записи.
Представьте, что это будет означать, если у вас есть архив с десятками или сотнями МБ?Если вы удалите запись в начале, вам придется скопировать почти все содержимое файла на несколько байт (или килобайт) назад, чтобы не оставить пробел в файле.
Так вот почему.
Эта структура позволяет легко добавлять новые записи, потому что их можно легко добавлять в конец файла, но удаление (запись) не может быть эффективно выполнено.