У меня есть вопрос, который кажется легким, но я не могу заставить его работать должным образом.
У меня в папке 'assets' есть zip-файл, который мне нужно распаковать, и у меня есть 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', я почти уверен, что единственный способ прочитать из этого каталога - этопотоковое вещание.
Есть ли способ для меня это сделать?