计算出的免费尺寸与系统统计数据不同

时间:2013-03-04 13:41:13

标签: android

我正在尝试计算Android中使用的文件存储总量。我使用了使用here

的递归函数

当我从SD卡的总存储空间中减去这个大小时,我会得到一个与Android使用StatFs不同的数字。

StatFs stat = new StatFs(path);
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getFreeBlocks();
return Formatter.formatFileSize(ctx, availableBlocks * blockSize);

这不是几Kb的差异,而是16GB SD卡中的高达2GB。

我检查了市场上的几个存储分析应用程序,他们遇到了同样的问题。他们说我有8.3 Gb免费,而Android一直告诉它是6Gb(这与我将手机连接到PC时的价值相同)。

我们在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

如果您只对总分区大小感兴趣(不是某个文件夹),您也可以使用Java的File类:

File f = new File("/mnt/sdcard/");

long free = f.getFreeSpace();
long total = f.getTotalSpace();
long usable = f.getUsableSpace();

此外,Android可能会阻止sd-apps和数据的一部分。

答案 1 :(得分:1)

  

我使用了here

的递归函数

该函数计算包含文件的大小:

  
    

只需浏览所有文件并总结它们的长度:

  

...但文件的大小不一定等于它在磁盘上占用的空间量。

  

这不是几Kb的差异,而是16GB SD卡中的高达2GB。

此增量应按文件计数进行缩放。