mad*_*mad 64
这篇文章可能很适合你的问题.
还检查这个帖子.SO上有这么多信息.
google了一下,这里是解决方案(在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);
Run Code Online (Sandbox Code Playgroud)
XXX*_*XXX 24
/*************************************************************************************************
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;
}
Run Code Online (Sandbox Code Playgroud)
将字节转换为人类可读格式(如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 "???";
}
Run Code Online (Sandbox Code Playgroud)
看起来这个StatFs类可能就是你需要使用的东西.我不确定哪条路径会被视为设备的根目录,但我相信无论目录如何,结果都是相同的,只要它是内部存储的一部分.这样的事情可能有用:
StatFs stats = new StatFs("/data");
int availableBlocks = stats.getAvailableBlocks();
int blockSizeInBytes = stats.getBlockSize();
int freeSpaceInBytes = availableBlocks * blockSizeInBytes;
Run Code Online (Sandbox Code Playgroud)
如果不出意外,StatFs课程应该为您提供一个良好的开端.
自2013年以来,Google已弃用某些方法,您可能会更改这些方法(仅限API 18+):
getAvailableBlocks() 至 getAvailableBlocksLong()getBlockCount() 至 getBlockCountLong()getBlockSize() 至 getBlockSizeLong()getFreeBlocks() 至 getFreeBlocksLong()| 归档时间: |
|
| 查看次数: |
37503 次 |
| 最近记录: |