Java StatFs方法getTotalBytes和getFreeBytes未返回正确的值

Java StatFs方法getTotalBytes和getFreeBytes未返回正确的值,java,android,Java,Android,我正在编写一个Android应用程序,其中需要显示总的内部存储空间和可用空间。我使用了StatFs类,并使用了getTotalBytes()和getFreeBytes()方法。我处理结果并将其转换为千兆字节。但这些方法给出的结果与实际值不匹配(许多文件管理应用程序都能找到) 我尝试过返回存储空间的不同方法,但我总是得到相同的结果:它们不匹配 private final static double noBytesInOneGB = 1073741824.0; StatFs stat = new S

我正在编写一个Android应用程序,其中需要显示总的内部存储空间和可用空间。我使用了
StatFs
类,并使用了
getTotalBytes()
getFreeBytes()
方法。我处理结果并将其转换为千兆字节。但这些方法给出的结果与实际值不匹配(许多文件管理应用程序都能找到)

我尝试过返回存储空间的不同方法,但我总是得到相同的结果:它们不匹配

private final static double noBytesInOneGB = 1073741824.0;
StatFs stat = new StatFs(Environment.getDataDirectory().getAbsolutePath());
double totalSpaceInGB = stat.getTotalBytes() / noBytesInOneGB;
double freeSpaceInGB = stat.getFreeBytes() / noBytesInOneGB;
如果我在手机上运行应用程序,此代码将返回49.55 GB的总存储空间和40.02 GB的可用存储空间。如果我使用文件管理器应用程序,它会显示总存储空间为53.32 GB,可用存储空间为42.37 GB


更新:我发现了问题所在。显然,所有文件管理器都将1KB视为1000字节,而不是1024字节。我不知道这是怎么准确的,但我还是用它来与其他一切保持一致。将Nobytecinonegb的值更改为1000000000.0使所有内容保持一致。

您应该将答案添加到自己的帖子中,并将其标记为选中。:)我用过这个,发现它给出的读数不准确,但在很大程度上是错误的。e、 g.500GB而不是4KB。知道
StatFs
在各个目录上是否正常工作吗?