通过 getDataDirectory() 检查可用 space 和获取 Root Directory() 不相同

Check avaliable space by getDataDirectory() and getRootDirectory() is not same

我尝试使用 getDataDirectory().getPath()getRootDirettory().getAbsolutePath() 在我的 android phone 上检查可用的 space,我得到了这些结果,

使用getRootDirectory().getAbsolutePath()

StatFs statFs = new StatFs(Environment.getRootDirectory().getAbsolutePath());
    Log.w("Path", String.valueOf(Environment.getRootDirectory()) );
    Log.w("Path", Environment.getRootDirectory().getAbsolutePath());
    long free_memory = statFs.getAvailableBlocksLong() * statFs.getBlockSizeLong();
    Log.d("Available byte by Environment.getRootDirectory().getAbsolutePath(): ", String.valueOf(free_memory/1048576));

Logcat:

W/Path: /system

W/Path: /system

W/Available byte by Environment.getRootDirectory().getAbsolutePath():: 91


使用getRootDirectory().getPath()

statFs = new StatFs(Environment.getDataDirectory().getPath());
    Log.w("Path", String.valueOf(Environment.getDataDirectory()) );
    Log.w("Path", Environment.getDataDirectory().getPath());
    long free_memory02 = statFs.getAvailableBlocksLong() * statFs.getBlockSizeLong();
    Log.d("Available byte by Environment.getDataDirectory().getPath(): ", String.valueOf(free_memory02/1048576));

Logcat:

W/Path: /data

W/Path: /data

W/Available byte by Environment.getDataDirectory().getPath():: 21426 MB or 20.924 GB

但是当我从 phone 中的设置中检查可用 space 时,只显示:20.34 GB

在我的 phone 中检查可用 space 的最准确方法是什么?为什么 getRootDirectory().getAbsolutePath()getDataDirectory.getPath() 不提供相同的 space?

What is the best accurate way to check available space

最好使用Environment.getExternalStorageDirectory()来检查可用内存。

内部存储中有 different partitions

/data 分区:只有用户数据。 //getDataDirectory()

/system 分区:包含核心 Android OS。 //getRootDirectory()

why getRootDirectory().getAbsolutePath() and getDataDirectory().getPath() not give the same space?

因为它们是不同的目录。

您可以使用

  final StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
  long totalinternal = (long) stat.getBlockSize() * (long) stat.getBlockCount();
  long available = (long) stat.getBlockSize() * (long) stat.getAvailableBlocks();