Узнайте размер, необходимый для сохранения разархивированного файла на SD-карте

Вот мое требование. Мне нужно разархивировать zip-файл и сохранить его на SD-карте. Теперь я разархивировал файл и сохранил его на SD-карте, используя приведенный здесь пример . И он работает нормально. Теперь, прежде чем сохранять файл на SD-карте, мне нужно выяснить, есть ли свободное место на SD-карте, чтобы я мог без проблем распаковать свой zip-файл. Я обнаружил, что этот пример полезен для определения размера папки на SD-карте. Поэтому я использовал это, чтобы узнать размер разархивированных файлов.

Но вот моя проблема. Как мы знаем, при извлечении zip-архива нам может понадобиться немного дополнительного места для сохранения файлов, так как размер разархивированного файла не будет таким же, как у самого zip-файла, и для него потребуется больше места. Вот мои вопросы.

  1. Как узнать свободное место на SDCard?
  2. Есть ли способ определить общее пространство, которое потребуется для разархивированных файлов, еще до его распаковки, чтобы я мог сообщить пользователю, если доступного места на SD-карте недостаточно?

Любая помощь очень ценится.


person Andro Selva    schedule 21.06.2012    source источник
comment
Для вопроса 1 см. файл .getUsableSpace()   -  person sudocode    schedule 21.06.2012


Ответы (1)


Вы можете повторять ZipEntry в своем файле, вызывая getSize () для каждого и сложите это, чтобы получить приблизительное значение. Однако это не всегда гарантируется (может вернуть -1). Добавьте к этому размер фактического zip-файла и, возможно, округлите до мегабайта, чтобы быть уверенным. Вы можете использовать что-то вроде этого, чтобы получить доступное свободное место на внешнем хранилище:

StatFs stats = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
long free = ((long) stats.getBlockSize()) * stats.getAvailableBlocks();
person Nikolay Elenkov    schedule 21.06.2012