Я сделал нечто подобное, но затем для нескольких (музыкальных) файлов в каталоге и в любой точке монтирования, доступной для системы. Я не уверен на 100%, что приведенное ниже объяснение будет применимо к внутреннему хранилищу, но оно должно по крайней мере дать вам несколько полезных указателей.
Размер файла можно легко узнать, позвонив по нему .length()
:
long fileSize = someFile.length();
Обратите внимание, что в случае, если someFile
на самом деле является каталогом, результат не определяется. Следовательно, чтобы получить размер каталога, выполните итерацию по всем его дочерним элементам (которые, в свою очередь, могут снова содержать каталоги, конечно).
Для получения информации о пространстве файловой системы я использовал класс statFs
, который является не более чем оболочкой Java для statfs()
. Расчет доступного пространства является простым умножением:
// 'fromFreeBytes' is the source file/directory size
StatFs toDirStats = new StatFs(mToDir.getAbsolutePath());
long toFreeBytes = ((long)toDirStats.getAvailableBlocks() * (long)toDirStats.getBlockSize());
if (toFreeBytes < fromFreeBytes) {
//insufficient available space
}
Наконец, важно помнить, что если вы собираетесь перемещать файлы между различными точками монтирования, вы не можете использовать метод File renameTo(...)
. Вместо этого вам придется использовать InputStream и OutputStream для копирования данных.
Удачи!