2012-06-17 2 views
2

В настоящее время я пытаюсь создать функцию для поиска файлов вложенных почтовых ящиков. Общая проблема, с которой я могу справиться, и мой код работает правильно. Проблема, с которой я сталкиваюсь, связана с форматами сжатия.(JAVA), обрабатывающий различные типы сжатия в zipstreams

По умолчанию zip-файлы не являются проблемой, я открываю свой zipinputstream, отправляю его в свою функцию поиска, проверяю каждую запись, если это zip-файл, и если это так, я переношу входной поток в другой zipinputstream и recurse. Проблема возникает, когда у меня есть стандартное сжатие ZIP.

Я хотел бы сделать эту функцию более надежной: чтобы определить формат сжатия записи zip, оберните ее в правильный дефлатер, а затем оберните это в поток zipinput, чтобы я мог рекурсировать. Проблема в том, что я не знаю, как декодировать параметры сжатия. Я также не знаю, как обращаться с другими форматами сжатия ZIP.

Любые советы о том, как сделать эту функцию более гибкой, были бы полезными. Я намерен интегрировать это в свои личные библиотеки, поэтому буду использовать эту функцию со всех направлений в будущем.

ответ

2

Насколько я знаю, единственный алгоритм сжатия, поддерживаемый java.util.zip, является стандартным. Но вы можете определить алгоритм сжатия с использованием the ZipEntry getMehod().

Добавление поддержки для других алгоритмов сжатия может потребовать некоторой работы с вашей стороны - если вы не найдете библиотеку с поддержкой разных алгоритмов. Например, есть library for 7zip's LZMA format, но классы не расширяют декодер или ZipEntry - они просто предоставляют альтернативу. Вам нужно будет распаковать вложенный файл zip несжатым, а затем использовать что-то еще, чтобы разархивировать его. Это, вероятно, не так чисто, как хотелось бы.

+0

нет, не такой чистый, как мне понравилось. Я надеялся, что zip-библиотека была немного более полной, чем эта, и я просто неправильно интерпретировал ссылку api. Я бы надеялся, что если нет прямой поддержки, есть библиотеки, которые более полны. Предполагаю, что мне придется попробовать найти несколько библиотек? –

+0

Да. Я сделал некоторые поиски и не нашел ничего всеобъемлющего. Но есть проект Apache commons, связанный с этим - вы не первый, разочарованный этим ограничением. – Thorn

+0

Да, это похоже на таинственный пробел в способности Java. так же, как отсутствие достойного поиска файлов. Я только что создал концепцию «FileRef», класс, который расширяет файл для представления файлов внутри zips или вложенных почтовых индексов. Он позволяет ссылаться на сжатые файлы и выводить входной поток для этой записи. С этим я также сделал независимую от платформы версию «dir» с подстановочными знаками и поиском подпапок и с поиском в zip-файлах. Подстановочные знаки и подпапки - это то, о чем я думаю, что Java не хватает. Хотя ограничение на регулярные молнии только ослабляет мою библиотеку. –

Смежные вопросы