Распакуйте один файл из .zip файла с несколькими файлами в Android - PullRequest
4 голосов
/ 09 августа 2011

Я пытаюсь получить только один файл (я знаю его имя) из очень большого zip-архива.Этот архив содержит около 100000 файлов, потому что я не хочу, чтобы мой файл находился в цикле.Я думаю, что это должно быть какое-то решение для этого случая, что-то вроде команды в Linux.

unzip archive.zip myfile.txt

Я написал следующий код

try  { 
   FileInputStream fin = new FileInputStream(rootDir+"/archive.zip"); 
   ZipInputStream zin = new ZipInputStream(fin); 
   ZipEntry ze = new ZipEntry("myfile.txt");

   FileOutputStream fout = new FileOutputStream(rootDir+"/buff/" + 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); 
}

Этот код создает новый файл в директории buff, но этотфайл пуст!Пожалуйста, помогите мне с этой проблемой!

Спасибо за ваше время!

1 Ответ

3 голосов
/ 09 августа 2011

Я довольно новичок в Java, но документация API содержит довольно разумное количество информации для стандартных библиотек Java, в том числе для java.util.zip .Переходя оттуда к записи ZipFile , вы можете прокрутить список методов до уровня getEntry .Похоже, что именно с этого маршрута вы должны начать!

РЕДАКТИРОВАТЬ: помните, что вам, вероятно, потребуется включить каталог (например: "dir \ subdirF \ subdirW \ FileThatYouWant.txtmsgstr ") при выполнении вызова, так как кажется, что имена файлов называются, когда вы проходите один за другим.

РЕДАКТИРОВАТЬ 2: здесь доступно значительное количество информации: Сжатие и распаковка данных с использованием API Java , если вы хотите немного прочитать: D.С учетом ограничений памяти, единственное разумное решение для вас может заключаться в использовании объекта ZipInputStream , который AFAIK потребует от вас проходить через каждый ZipEntry в архиве (в среднем 50 000?), Но не потребует от васзагрузить весь файл в память.Что касается производительности, я бы предположил, что пошаговое выполнение вручную будет таким же эффективным, как любая текущая реализация этой нишевой функциональности.

...