Как распаковать архив 7zip в Android? - PullRequest
6 голосов
/ 08 августа 2010

У меня есть 7zip архив, который содержит несколько сотен файлов, разделенных на разные каталоги.Цель состоит в том, чтобы загрузить его с FTP-сервера, а затем извлечь его на телефоне.

Моя проблема в том, что 7zip SDK не содержит много.Я ищу примеры, учебные пособия и фрагменты, касающиеся распаковки файлов 7z.

(декомпрессия с помощью Intent является только второстепенным вариантом)

Ответы [ 2 ]

2 голосов
/ 24 декабря 2012

Go здесь :

LZMA SDK просто предоставляет кодер и декодер для кодирования / декодирования необработанных данных, но архив 7z является сложным форматом для хранения нескольких файлов.

1 голос
/ 02 марта 2016

Я нашел эту страницу , которая предоставляет альтернативу, которая работает как шарм. Вам нужно только добавить compile 'org.apache.commons:commons-compress:1.8'

к вашему скрипту сборки и используйте функцию, которую вы желаете. Для этого вопроса я сделал следующее:

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();
        }

Единственный откат составляет приблизительно 200 КБ для импортированной библиотеки. Кроме этого, он действительно прост в использовании.

...