Кроссплатформенное сжатие файлов

Нам нужно кроссплатформенное решение для сжатия файлов. Наш сервер работает на Windows XP/Vista/7 и 3 дистрибутивах Unix, SunOS, HPUX и AIX. Наш сервер создает файлы, которые необходимо заархивировать, прежде чем вернуть их клиенту. Наша первоначальная мысль заключалась в том, чтобы сжать файлы с помощью jar, так как на большинстве серверов установлена ​​java, но, по-видимому, jar не включен в jre, а только jdk. Наш сервер написан на C, а приложение, которое должно создать сжатый файл, — Perl.

Мне бы очень хотелось что-то, чего у меня нет, так как наша установочная база БОЛЬШАЯ, и добавление новых необходимых приложений, как правило, затруднено. Есть ли что-нибудь, что гарантированно будет встроено в каждую из этих ОС, что я мог бы использовать для архивирования? Даже если мне придется использовать что-то другое для каждого, это, вероятно, тоже будет хорошо.


person Morinar    schedule 11.08.2009    source источник
comment
Кстати, jar на самом деле является zip, поэтому все, что вам нужно сделать, это переименовать jar как zip, а затем вы можете распаковать его.   -  person Milhous    schedule 12.08.2009
comment
Если бы тег java был правильным, вы могли бы использовать Java 1.4 java.sun.com/j2se/1.4.2/docs/api/java/util/zip/ (и GZIPInputStream).   -  person Jim Ferrans    schedule 12.08.2009


Ответы (4)


Если вы не хотите ничего устанавливать, вы в значительной степени SOL. Windows не делает это легко.

Если вы хотите написать что-нибудь сами, java.util.zip находится в Java 2 Standard Edition (J2SE), а в Perl есть Архивировать::Zip

person Jeremy Logan    schedule 11.08.2009
comment
SOL оказался правильным ответом. Наша установочная база настолько нелепо разнообразна, что у всех наших клиентов буквально нет ничего. Похоже, мы в конечном итоге будем использовать jar для более новых версий нашего программного обеспечения (поскольку нам требуется jdk), в то время как более старые версии будут иметь связанное приложение zip. Спасибо всем за отзывы. - person Morinar; 14.08.2009
comment
Просто чтобы немного продвинуться, вы понимаете, что файлы JAR ЯВЛЯЮТСЯ ZIP-файлами, верно? Это позволит вам некоторую совместимость вперед. - person Jeremy Logan; 14.08.2009

Мне очень нравится 7-zip, но в таких ситуациях, как ваша, я всегда использую наименьший общий знаменатель: ZIP. Простой старый ZIP. Большинство Unix и Linux имеют zip и unzip. А для Windows существует множество опций, в том числе 7-zip, которые могут работать с zip-файлами. И, вероятно, у клиентов будет установлен zip-клиент.

person Leonel Martins    schedule 11.08.2009

Вы всегда можете рассмотреть возможность распространения инструмента сжатия с открытым исходным кодом или даже использования SDK для сжатия в составе своего приложения, например 7 ZIP-файлов

person Eric J.    schedule 11.08.2009

Если у вас установлена ​​Java (независимо от JRE или JDK), вы можете использовать pack200 и unpack200 для создания и распаковки архивов. Pack200 использует стандартное сжатие gzip.

Обратите внимание, что pack200 не позволяет сжимать несколько файлов в одном архиве (природа gzip). При необходимости вы можете реализовать свой собственный инструмент на чистой Java, который будет создавать zip-файлы и запускать их где угодно с унифицированным интерфейсом командной строки (Java имеет встроенную поддержку zip, см. некоторые примеры).

Если вы пойдете по этому пути, вы также можете использовать нативную Java-реализацию форматов bz2 или 7zip для лучшего сжатия.

person CrazyCoder    schedule 11.08.2009
comment
Это выглядит как победитель на компьютере с Windows, но я не могу найти его ни на одном из компьютеров с Unix. Будет ли это в нестандартном месте или что-то в этом роде? - person Morinar; 12.08.2009
comment
pack200 доступен в Sun JDK, в папке JDK_HOME/bin на платформе Linux. Если у вас на серверах установлен GCJ, вам не повезло, и вам придется реализовать свое небольшое приложение на Java для создания архивов. - person CrazyCoder; 12.08.2009