Мне нужен небольшой фрагмент кода, который распаковывает несколько файлов из данного файла .zip и дает отдельные файлы в соответствии с форматом, в котором они находились в заархивированном файле. Пожалуйста, оставьте свои знания и помогите мне.
131
Ответы:
Если бы версия Peno немного оптимизировалась. Увеличение производительности ощутимо.
источник
ze
- каталог. Попытка выполнить эти операции вызовет исключение.На основании ответа Василия Сочинского, немного подправленного и с небольшим исправлением:
Заметные различия
public static
- это метод статической утилиты, который может быть где угодно.File
параметра, потому чтоString
: / для файлов, и нельзя было указать, где файл zip должен быть извлечен ранее. Такжеpath + filename
объединение> https://stackoverflow.com/a/412495/995891throws
- потому что ловить поздно - добавьте попытку поймать, если действительно не заинтересованы в них.mkdirs()
важно.finally
для предотвращения утечек ресурсов.Так
следует сделать эквивалент оригинала
источник
UTF8 format
. Итак, я использовал этот код, который использует библиотеку Apachecommons-compress
.Это мой метод распаковки, который я использую:
источник
Android имеет встроенный Java API. Проверьте пакет java.util.zip .
Класс ZipInputStream - это то, что вы должны изучить. Прочитайте ZipEntry из ZipInputStream и поместите его в файловую систему / папку. Проверьте аналогичный пример, чтобы сжать в ZIP- файл.
источник
Котлинский путь
использование
источник
Хотя ответы, которые уже здесь, работают хорошо, я обнаружил, что они были немного медленнее, чем я надеялся. Вместо этого я использовал zip4j , который я считаю лучшим решением из-за своей скорости. Это также учитывало различные варианты величины сжатия, которые я нашел полезными.
источник
ОБНОВЛЕНИЕ 2016 использовать следующий класс
Как пользоваться
права доступа
источник
Согласно ответу @zapl, распакуйте с отчетом о проделанной работе:
источник
-> Хелпер Класс (Unzipper.java)
-> XML-макет (activity_main.xml):
-> разрешение в файле Menifest:
источник
Вот ZipFileIterator (как итератор Java, но для файлов zip):
источник
Минимальный пример, который я использовал для распаковки определенного файла из моего zip-файла в папку кэша приложений. Затем я читаю файл манифеста другим методом.
источник
Я работаю с zip-файлами, которые класс Java ZipFile не может обрабатывать. Java 8, по-видимому, не может обрабатывать метод сжатия 12 (я полагаю, bzip2). Попробовав несколько методов, включая zip4j (который также не работает с этими конкретными файлами из-за другой проблемы), я добился успеха с Apache commons-compress, который поддерживает дополнительные методы сжатия, упомянутые здесь .
Обратите внимание, что приведенный ниже класс ZipFile не является классом java.util.zip.
На самом деле это org.apache.commons.compress.archivers.zip.ZipFile, поэтому будьте осторожны с импортом.
Для Gradle:
источник
Основываясь на ответе zapl, добавление
try()
aroundCloseable
автоматически закрывает потоки после использования.Использование
Constant.DefaultBufferSize
(65536
) получено изC# .NET 4
Stream.CopyTo из ответа Джона Скита здесь: https://stackoverflow.com/a/411605/1876355Я всегда просто вижу, как используются сообщения
byte[1024]
илиbyte[4096]
буфер, никогда не знал, что он может быть намного больше, что улучшает производительность и при этом работает совершенно нормально.Вот
Stream
исходный код: https://referencesource.microsoft.com/#mscorlib/system/io/stream.csТем не менее, я набрал его обратно,
65536
что также кратно на4096
всякий случай.источник
Защищенный паролем ZIP-файл
если вы хотите сжимать файлы с паролем, вы можете взглянуть на эту библиотеку, которая может легко архивировать файлы с паролем:
Zip:
Распакуйте:
Рар:
Документация к этой библиотеке достаточно хороша, я просто добавил оттуда несколько примеров. Это совершенно бесплатно и написано специально для Android.
источник