Get free space on internal memory Get free space on internal memory android android

Get free space on internal memory


this post might fit well to your question.

also check this thread. there is so much info here on SO.

googled a bit and here is the solution (found at android git)

File path = Environment.getDataDirectory();StatFs stat = new StatFs(path.getPath());long blockSize = stat.getBlockSize();long availableBlocks = stat.getAvailableBlocks();return Formatter.formatFileSize(this, availableBlocks * blockSize);


/*************************************************************************************************Returns size in bytes.If you need calculate external memory, change this:     StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());to this:     StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());        **************************************************************************************************/    public long TotalMemory()    {        StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());           long   Total  = ( (long) statFs.getBlockCount() * (long) statFs.getBlockSize());        return Total;    }    public long FreeMemory()    {        StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());        long   Free   = (statFs.getAvailableBlocks() * (long) statFs.getBlockSize());        return Free;    }    public long BusyMemory()    {        StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());           long   Total  = ((long) statFs.getBlockCount() * (long) statFs.getBlockSize());        long   Free   = (statFs.getAvailableBlocks()   * (long) statFs.getBlockSize());        long   Busy   = Total - Free;        return Busy;    }

Converting bytes to human readable format (like 1 Mb, 1 Gb)

    public static String floatForm (double d)    {       return new DecimalFormat("#.##").format(d);    }    public static String bytesToHuman (long size)    {        long Kb = 1  * 1024;        long Mb = Kb * 1024;        long Gb = Mb * 1024;        long Tb = Gb * 1024;        long Pb = Tb * 1024;        long Eb = Pb * 1024;        if (size <  Kb)                 return floatForm(        size     ) + " byte";        if (size >= Kb && size < Mb)    return floatForm((double)size / Kb) + " Kb";        if (size >= Mb && size < Gb)    return floatForm((double)size / Mb) + " Mb";        if (size >= Gb && size < Tb)    return floatForm((double)size / Gb) + " Gb";        if (size >= Tb && size < Pb)    return floatForm((double)size / Tb) + " Tb";        if (size >= Pb && size < Eb)    return floatForm((double)size / Pb) + " Pb";        if (size >= Eb)                 return floatForm((double)size / Eb) + " Eb";        return "???";    }


It looks like the StatFs class might be what you need to use. I'm not sure what path would be considered the root of the device, but I believe the result would be the same regardless of directory, as long as it's part of the internal storage. Something like this may work:

StatFs stats = new StatFs("/data");int availableBlocks = stats.getAvailableBlocks();int blockSizeInBytes = stats.getBlockSize();int freeSpaceInBytes = availableBlocks * blockSizeInBytes;

If nothing else, the StatFs class should give you a good start on where to look.