how to extract files from a 7-zip stream in Java without store it on hard disk?

user3330817 picture user3330817 · Feb 20, 2014 · Viewed 19.6k times · Source

I want to extract some files from a 7-zip byte stream,it can't be stored on hard disk,so I can't use RandomAccessFile class,I have read sevenzipjbinding source code,it also uncompresses the file with some closed source things like lib7-Zip-JBinding.so which wrote by other language.And the method of the official package SevenZip

SevenZip.Compression.LZMA.Decoder.Code(java.io.InputStream inStream,java.io.OutputStream outStream,long outSize,ICompressProgressInfo progress)

can only uncompress a single file.

So how could I uncompress a 7-zip byte stream with pure Java?

Any guys have solution?

Sorry for my poor English and I'm waiting for your answers online.

Answer

SANN3 picture SANN3 · Feb 20, 2014

Commons compress 1.6 and above has support for manipulating 7z format. Try it.

Reference :

http://commons.apache.org/proper/commons-compress/index.html

Sample :

    SevenZFile sevenZFile = new SevenZFile(new File("test-documents.7z"));
    SevenZArchiveEntry entry = sevenZFile.getNextEntry();
    while(entry!=null){
        System.out.println(entry.getName());
        FileOutputStream out = new FileOutputStream(entry.getName());
        byte[] content = new byte[(int) entry.getSize()];
        sevenZFile.read(content, 0, content.length);
        out.write(content);
        out.close();
        entry = sevenZFile.getNextEntry();
    }
    sevenZFile.close();