Mam pytanie, które wydaje się łatwe, ale nie mogę sprawić, by działało poprawnie.Android: uzyskać liczbę plików w Zip?
Mam plik zip w folderze "zasoby", który muszę rozpakować i mam ProgessBar
, w którym chcę wyświetlić użytkownikowi postępy w działaniu.
Mam wszystko działa, ale chcę ustawić maksymalną wartość ProgessBar
na liczbę plików w pliku zip. Liczba plików w tym folderze będzie się czasami zmieniać, więc chcę, aby wartość parametru ProgessBar
była względna do liczby plików znajdujących się w pliku ZIP.
Używam interfejsu ZipInputStream
-API, ale wygląda na to, że nie ma sposobu na uzyskanie liczby plików w pliku zip. Jedynym sposobem mogę od pomyśleć, to w ten sposób:
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);
}
To działa, ale o dwóch pętli while wydaje się nieco zbędny, które są w zasadzie robi to samo.
Wiem, że istnieje ZipFile
-API o metodzie size()
, ale wymaga ona ścieżki do pliku, a ponieważ mój plik znajduje się w folderze "aktywów", jestem pewien, że jest to jedyny sposób na odczytanie ten katalog jest przesyłany strumieniowo.
Czy jest dla mnie sposób, aby to osiągnąć?
, ale co, jeśli jeden plik ma rozmiar 10 kB, a drugi 10 kb, aw archiwum są tylko dwa pliki? – pleerock
Nie będzie działać, ponieważ ZipInputStream nie ma żadnej metody o nazwie getSize. – melbic