Я посмотрел библиотеку Zip по умолчанию, которая поставляется с JDK и библиотеками сжатия Apache, и я недоволен ими по 3 причинам:
Они раздуты и имеют плохой дизайн API. Мне нужно написать 50 строк выходного массива байтовых пластин, ввести данные в формате zip, отфильтровать потоки и закрыть соответствующие потоки, перехватить исключения и самостоятельно переместить байтовые буферы ? Почему у меня не может быть простого API, который выглядит так
Zipper.unzip(InputStream zipFile, File targetDirectory, String password = null)
иZipper.zip(File targetDirectory, String password = null)
работает?Кажется, что сжатие, разархивирование уничтожает метаданные файла, а обработка пароля нарушается.
Кроме того, все библиотеки, которые я пробовал, были в 2-3 раза медленнее по сравнению с инструментами zip из командной строки, которые я получаю с UNIX?
Для меня (2) и (3) - второстепенные моменты, но я действительно хочу хорошую проверенную библиотеку с однострочным интерфейсом.
источник
Ответы:
Я знаю, что уже поздно, и есть много ответов, но этот zip4j - одна из лучших библиотек для архивирования, которые я использовал. Это просто (без кода котла) и может легко обрабатывать файлы, защищенные паролем.
Зависимость Maven это:
источник
С Apache Commons-IO «S
IOUtils
вы можете сделать это:Это все еще некоторый шаблонный код, но у него есть только 1 не экзотическая зависимость: Commons-IO
источник
close()
это не повредит.Извлеките zip-файл и все его подпапки, используя только JDK:
Zip-файлы и все их подпапки:
источник
extractFolder(String zipFile,String extractFolder)
Другой вариант, который вы можете проверить, это zt-zip, доступный на Maven central и на странице проекта по адресу https://github.com/zeroturnaround/zt-zip.
Он имеет стандартные функции упаковки и распаковки (в потоках и в файловой системе) + множество вспомогательных методов для проверки файлов в архиве или добавления / удаления записей.
источник
Полная реализация для Zip / Распаковать папку / файл с zip4j
Загрузите банку отсюда и добавьте ее в путь сборки вашего проекта.
class
Ниже может сжимать и извлекать любой файл или папку, с или без пароля охраноисточник
Очень хороший проект - TrueZip .
Например (с сайта ):
источник
Другой вариант - JZlib . По моему опыту, он менее «центрирован на файлах», чем zip4J, поэтому, если вам нужно работать с каплями в памяти, а не с файлами, вы можете взглянуть на это.
источник
Здесь приведен полный пример рекурсивного архивирования и разархивирования файлов: http://developer-tips.hubpages.com/hub/Zipping-and-Unzipping-Nested-Directories-in-Java-using-Apache-Commons-Compress
источник
Вы смотрели на http://commons.apache.org/vfs/ ? Он утверждает, что многое упростит для вас. Но я никогда не использовал это в проекте.
Я также не знаю других библиотек сжатия Java-Native, кроме JDK или Apache Compression.
Я помню, как однажды мы вынули некоторые функции из Apache Ant - в них встроено множество утилит для сжатия / распаковки.
Пример кода с VFS будет выглядеть так:
источник