Java: библиотека Bzip2 - PullRequest
       11

Java: библиотека Bzip2

7 голосов
/ 11 декабря 2010

Мне нужно создать архив Bzip2. Загруженная библиотека bzip2 из 'Apache ant'.

I use class CBZip2OutputStream: 
String s = .....
CBZip2OutputStream os = new CBZip2OutputStream(fos);
                os.write(s.getBytes(Charset.forName("UTF-8")));
                os.flush();
                os.close();

(я не нашел ни одного примера, как его использовать, поэтому решил использовать его таким образом)

Но он создает поврежденный архив на диске.

Ответы [ 2 ]

7 голосов
/ 11 декабря 2010

Вы должны добавить заголовок BZip2 (два байта: 'B', 'Z') перед записью содержимого:

//Write 'BZ' before compressing the stream
fos.write("BZ".getBytes());
//Write to compressed stream as usual
CBZip2OutputStream os = new CBZip2OutputStream(fos);
... the rest ...

Затем, например, вы можете извлечь содержимое файла bzipped с помощью cat compressed.bz2 | bunzip2 > uncompressed.txt в системе * nix.

2 голосов
/ 22 октября 2012

Я не нашел пример, но в итоге я понял, как использовать CBZip2OutputStream, так что вот один:

public void createBZipFile() throws IOException{

        // file to zip
        File file = new File("plane.jpg");

        // fichier compresse
        File fileZiped= new File("plane.bz2");

        // Outputstream for fileZiped
        FileOutputStream fileOutputStream = new FileOutputStream(fileZiped);
        fileOutputStream.write("BZ".getBytes());

        // we getting the data in a byte array
        byte[] fileData = getArrayByteFromFile(file);

        CBZip2OutputStream bzip = null;

        try{
            bzip = new CBZip2OutputStream(fileOutputStream );

            bzip.write(fileData, 0, fileData.length);
            bzip.flush() ;
            bzip.close();  

        }catch (IOException ex) {

            ex.printStackTrace();
        }



        fos.close();

    }
...