Java - чтение файла BZ2 и распаковка / анализ на лету - PullRequest
13 голосов
/ 29 января 2011

У меня довольно большой файл BZ2 с несколькими текстовыми файлами. Можно ли использовать Java для распаковки определенных файлов внутри файла BZ2 и распаковки / анализа данных на лету? Допустим, файл BZ2 объемом 300 МБ содержит 1 ГБ текста. В идеале я хотел бы, чтобы моя java-программа сказала: прочитайте 1 МБ файла BZ2, распакуйте его на лету, действуйте и продолжайте читать файл BZ2 для получения дополнительных данных. Это возможно?

Спасибо

Ответы [ 2 ]

24 голосов
/ 10 июня 2013

Библиотека commons-compress от apache довольно хороша. Вот их страница образцов: http://commons.apache.org/proper/commons-compress/examples.html

Вот последний фрагмент кода Maven:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.10</version>
</dependency>

А вот мой метод утилит:

public static BufferedReader getBufferedReaderForCompressedFile(String fileIn) throws FileNotFoundException, CompressorException {
    FileInputStream fin = new FileInputStream(fileIn);
    BufferedInputStream bis = new BufferedInputStream(fin);
    CompressorInputStream input = new CompressorStreamFactory().createCompressorInputStream(bis);
    BufferedReader br2 = new BufferedReader(new InputStreamReader(input));
    return br2;
}
2 голосов
/ 29 января 2011

Проект Ant содержит библиотеку bzip2 .Который имеет org.apache.tools.bzip2.CBZip2InputStream класс.Вы можете использовать этот класс для распаковки файла bzip2 на лету - он просто расширяет стандартный класс Java InputStream.

...