Есть ли способ изменить zip на андроид без необходимости извлекать его содержимое? Мне нужно только добавить/удалить около 10 файлов. Если бы мне пришлось извлечь почтовый индекс, он мог бы подняться до 200 мб.Android Изменить Zip FIle
ответ
Кажется, что это невозможно без сторонних пакетов. Appending files to a zip file with Java
Я все еще жду ответов ...
Я не думаю, что вы собираетесь найти простой способ сделать это с помощью встроенного в библиотеках. Если это ключевая функция вашего приложения, вы можете написать свой собственный (разбор zip не так уж и трудный).
Вот общий подход: начните чтение zip, определите первый заголовок записи zip - когда вы найдете заголовок для записи, которую хотите исключить, просто продолжайте читать следующую запись - иначе выпишите. Следите за выходным смещением каждого zipentry. Затем напишите свой собственный почтовый трейлер в конце файла.
Формат zip четко определен (и не особенно сложный - особенно b/c вам не придется гадать с вентилятором или дефлятом или шифрованием или что-то в этом роде), и то, что вы пытаетесь сделать, просто: http://www.pkware.com/documents/casestudies/APPNOTE.TXT
С другой стороны, если это не основной функциональностью вашего приложения, найдите и лицензируйте библиотеку, которая может это сделать (я сомневаюсь, что вы найдете реализации с открытым исходным кодом, которые делают) и перейдите на ,
+1, интересный вопрос; Я подозреваю, что андроид использует некоторые стандартные java-библиотеки для изменения сжатых файлов, поэтому вы можете искать их на этом сайте. – jcollum
@jcollum: У меня пока нет кода, но я жду, хочу ли мне использовать сторонний код или 'java.util.zip'. – nebkat
java.util.zip не дает вам то, что вам нужно. Из собственного кода вы можете использовать что-то вроде build/tools/zipalign/ZipFile.cpp, которое может удалять записи и добавлять сжатые данные без повторного сжатия (например, добавление gzipped-файла в zip-архив), но это не является частью публичного API, поэтому Я не могу это порекомендовать. – fadden