How to unzip a 7zip archive in Android?

后端 未结 2 818
我在风中等你
我在风中等你 2021-01-12 21:54

I have a 7zip archive which contains some hundred files separated into different directories. The target is to download it from a FTP server and then extract it

相关标签:
2条回答
  • 2021-01-12 22:35

    i found this page that provides an alternative that works like a charm. You only have to add compile 'org.apache.commons:commons-compress:1.8'

    to your build gradle script and use the feature you desire. For this issue i did the following :

    AssetManager am = getAssets();
            InputStream inputStream = null;
            try {
                inputStream = am.open("a7ZipedFile.7z");
                File file1 = createFileFromInputStream(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
    SevenZFile sevenZFile = null;
            try{
                File f = new File(this.getFilesDir(), "a7ZipedFile.7z");
                OutputStream outputStream = new FileOutputStream(f);
                byte buffer[] = new byte[1024];
                int length = 0;
                while((length=inputStream.read(buffer)) > 0) {
                    outputStream.write(buffer,0,length);
                }
    
                try {
                    sevenZFile = new SevenZFile(f);
                    SevenZArchiveEntry entry = sevenZFile.getNextEntry();
                    while (entry != null) {
                        System.out.println(entry.getName());
                        FileOutputStream out = openFileOutput(entry.getName(), Context.MODE_PRIVATE);
                        byte[] content = new byte[(int) entry.getSize()];
                        sevenZFile.read(content, 0, content.length);
                        out.write(content);
                        out.close();
                        entry = sevenZFile.getNextEntry();
                    }
                    sevenZFile.close();
                    outputStream.close();
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }catch (IOException e) {
                //Logging exception
                e.printStackTrace();
            }
    

    The only draw back is approximately 200k for the imported library. Other than that it is really easy to use.

    0 讨论(0)
  • 2021-01-12 22:41

    Go here:

    LZMA SDK just provides the encoder and decoder for encoding/decoding the raw data, but 7z archive is a complex format for storing multiple files.

    0 讨论(0)
提交回复
热议问题