2010-08-08 4 views
6

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

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

(Декомпрессия через Intent только вторичный вариант)

+0

Список учебников 7-Zip находится внизу this page. – gregS

+0

Благодарим вас за ответ, но ссылки на странице 7zip довольно старые и не пригодны для меня. Я разветил этот вопрос в другом: http://stackoverflow.com/questions/3469904/ – Wolkenjaeger

+0

Возможно, вам стоит взглянуть на AndroXplorer v.3. Он поддерживает множество форматов файлов, включая 7z. – Yongki

ответ

2

Перейти here:

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

-1

Я нашел это page, который предоставляет альтернативу, которая работает как шарм. Вам нужно только добавить 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 тыс. Для импортируемой библиотеки. Помимо этого, он очень прост в использовании.

Смежные вопросы