如何获取设备的总存储空间大小?

时间:2018-04-01 19:02:36

标签: java android

Currenty我得到的总存储空间大小为:

public static long getTotalSize(String path) {
    try {
        final StatFs statFs = new StatFs(path);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            return statFs.getTotalBytes();
        } else {
            return statFs.getBlockCount() * statFs.getBlockSize();
        }
    } catch (Exception e) {
        return 0;
    }
}

作为path我正在使用Environment.getExternalStorageDirectory().getAbsolutePath()。这导致54,0 GB。问题是该设备的大小为64 GB。

如何检测丢失的10 GB?

1 个答案:

答案 0 :(得分:0)

StatFs - 检索有关文件系统空间的整体信息。这是Unix statvfs()的包装器。

从API级别18我们使用

long getTotalBytes - The total number of bytes supported by the file system. 

对于较旧的API使用

int getBlockCount ()
int getBlockSize ()

StatFs stat = new StatFs(**path**);
long bytesAvailable = (long)stat.getBlockSize() *(long)stat.getBlockCount();

作为路径您使用Environment.getExternalStorageDirectory(),请查看此值。在具有多个共享/外部存储目录的设备中,此目录表示用户将与之交互的主存储。

您需要使用路径的字符串值,如下所示: “到/ mnt / external_sd /” “/ MNT / extSdCard /”

您可以检索所有 / mnt / 设备的列表,并使用其中一个值。

File mntDir = new File("/mnt/");
if(mntDir.isDirectory()){ 
String[] dirList = mntDir.list();...}

或类似

var file=new Java.IO.File("storage/");
var listOfStorages=file.ListFiles();

String[] externals = System.getenv("SECONDARY_STORAGE").split(":");