How can I get the size of a folder on SD card in Android? How can I get the size of a folder on SD card in Android? android android

How can I get the size of a folder on SD card in Android?


Just go through all files and sum the length of them:

/** * Return the size of a directory in bytes */private static long dirSize(File dir) {    if (dir.exists()) {        long result = 0;        File[] fileList = dir.listFiles();        if (fileList != null) {            for(int i = 0; i < fileList.length; i++) {                // Recursive call if it's a directory                if(fileList[i].isDirectory()) {                    result += dirSize(fileList[i]);                } else {                    // Sum the file size in bytes                    result += fileList[i].length();                }            }        }        return result; // return the file size    }    return 0;}

NOTE: Function written by hand so it could not compile!


Here's some code that avoids recursion, and also calculates the physical size instead of the logical size:

public static long getFileSize(final File file) {    if (file == null || !file.exists())        return 0;    if (!file.isDirectory())        return file.length();    final List<File> dirs = new LinkedList<>();    dirs.add(file);    long result = 0;    while (!dirs.isEmpty()) {        final File dir = dirs.remove(0);        if (!dir.exists())            continue;        final File[] listFiles = dir.listFiles();        if (listFiles == null || listFiles.length == 0)            continue;        for (final File child : listFiles) {            result += child.length();            if (child.isDirectory())                dirs.add(child);        }    }    return result;}


/** * Try this one for better performance * Mehran * Return the size of a directory in bytes **/private static long dirSize(File dir) {    long result = 0;    Stack<File> dirlist= new Stack<File>();    dirlist.clear();    dirlist.push(dir);    while(!dirlist.isEmpty())    {        File dirCurrent = dirlist.pop();        File[] fileList = dirCurrent.listFiles();        for(File f: fileList){            if(f.isDirectory())                dirlist.push(f);            else                result += f.length();        }    }    return result;}