У меня есть вопрос, который кажется простым, но я не могу заставить его работать должным образом.
У меня есть zip-файл в папке «assets», который мне нужно разархивировать, и у меня есть ProgessBar
, в котором я хочу показать пользователю, как идет прогресс.
У меня есть все работает, но я хочу установить максимальное значение ProgessBar
, равное количеству файлов в zip-файле.Количество файлов в этой папке иногда будет меняться, поэтому я хочу, чтобы ProgessBar
соответствовал количеству файлов, содержащихся в zip-архиве.
Я использую ZipInputStream
- API, но, похоже, нет способа получить количество файлов в zip-файле. Единственный способ, который я могу придумать, - это сделать следующее:
ZipInputStream zin = new ZipInputStream(getAssets().open(
"myFile.zip"));
int numFiles = 0;
int increment = 0;
while (zin.getNextEntry() != null) {
numFiles++;
}
ZipEntry ze = null;
//Set the Max..value here..
progessBar.setMax(numFiles);
while ((ze = zin.getNextEntry()) != null) {
increment++;
progessBar.setProgress(increment);
}
Это работает, но наличие двух циклов while кажется немного избыточным, которые в основном делают то же самое.
Я знаю, что существует ZipFile
-API, который имеет метод size ()
, но для него требуется путь к файлу, и поскольку мой файл находится в папке «assets», я уверен, что единственный способ читать из этого каталога - посредством потоковой передачи.
Есть ли у меня способ добиться этого?