Разархивирование zip файла в android

374
12 января 2017, 04:30

Нужно программно разархивировать zip файл. Знаю про либу zip4j, но как я понял, получать прогресс из этой задачи не получится.

AsyncTask? Может быть в нем запускать разархивацию и сравнивать размеры файлов? Не вариант, так как степень сжатия неизвестна.

Да и вообще мне кажется все проще. Никто с этим не сталкивался?

Answer 1

Функция разархивирования:

public class Decompress { 
  private String zipFile; 
  private String location; 
  public Decompress(String zipFile, String location) { 
    this.zipFile = zipFile; 
    this.location = location; 
    dirChecker(""); 
  } 
  public void unzip() { 
    try  { 
      FileInputStream fin = new FileInputStream(zipFile); 
      ZipInputStream zin = new ZipInputStream(fin); 
      ZipEntry ze = null; 
      while ((ze = zin.getNextEntry()) != null) { 
        Log.v("Decompress", "Unzipping " + ze.getName()); 
        if(ze.isDirectory()) { 
          dirChecker(ze.getName()); 
        } else { 
          FileOutputStream fout = new FileOutputStream(location + ze.getName()); 
          for (int c = zin.read(); c != -1; c = zin.read()) { 
            fout.write(c); 
          } 
          zin.closeEntry(); 
          fout.close(); 
        } 
      } 
      zin.close(); 
    } catch(Exception e) { 
      Log.e("Decompress", "unzip", e); 
    } 
  } 
  private void dirChecker(String dir) { 
    File f = new File(location + dir); 
    if(!f.isDirectory()) { 
      f.mkdirs(); 
    } 
  } 
} 

Пример работы:

String zipFile = Environment.getExternalStorageDirectory() + "/files.zip"; 
String unzipLocation = Environment.getExternalStorageDirectory() + "/unzipped/"; 
Decompress d = new Decompress(zipFile, unzipLocation); 
d.unzip(); 
READ ALSO
Почему нельзя использовать <T super Number> в Generics?

Почему нельзя использовать <T super Number> в Generics?

Я хочу ограничить тип, передаваемый в метод, в качестве параметра снизу:

250
Возможно ли изменить интерфейс звонка?

Возможно ли изменить интерфейс звонка?

Хотел изменить интерфейс страницы набора номера и звонкаПерерыл везде, нигде об этом не говорится или не правильно искал

296
Различия между extend и super в Generics

Различия между extend и super в Generics

Для примера такой код:

295
API facebook, token, Java, Spring

API facebook, token, Java, Spring

В каком виде приходит ответ от facebook, после отправки запроса

278