Android中Environment与StatFs获取系统/SDCard存储空间大小
Posted yangykaifa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中Environment与StatFs获取系统/SDCard存储空间大小相关的知识,希望对你有一定的参考价值。
近期想起android开发的知识。好久没有使用了,都忘得几乎相同了,今天查看了一会资料往回捡捡,顺便写下来帮助一下须要的同学。
首先讲述一下Environment与StatFs这两个类,然后介绍它们的具体用法。
1、 Environment 类:
Environment 是一个提供訪问环境变量的类。
Environment 包括常量:
MEDIA_BAD_REMOVAL
解释:返回getExternalStorageState() ,表明SDCard 被卸载前己被移除
MEDIA_CHECKING
解释:返回getExternalStorageState() 。表明对象正在磁盘检查。
MEDIA_MOUNTED
解释:返回getExternalStorageState() ,表明对象是否存在并具有读/写权限
MEDIA_MOUNTED_READ_ONLY
解释:返回getExternalStorageState() 。表明对象权限为仅仅读
MEDIA_NOFS
解释:返回getExternalStorageState() ,表明对象为空白或正在使用不受支持的文件系统。
MEDIA_REMOVED
解释:返回getExternalStorageState() ,假设不存在 SDCard 返回
MEDIA_SHARED
解释:返回getExternalStorageState() 。假设 SDCard 未安装 。并通过 USB 大容量存储共享 返回
MEDIA_UNMOUNTABLE
解释:返回getExternalStorageState() ,返回 SDCard 不可被安装 假设 SDCard 是存在但不能够被安装
MEDIA_UNMOUNTED
解释:返回getExternalStorageState() ,返回 SDCard 已卸掉假设 SDCard 是存在可是没有被安装
Environment 经常用法:
方法:getDataDirectory()
解释:返回 File ,获取 Android 数据文件夹。
方法:getDownloadCacheDirectory()
解释:返回 File 。获取 Android 下载/缓存内容文件夹。
方法:getExternalStorageDirectory()
解释:返回 File ,获取外部存储文件夹即 SDCard
方法:getExternalStoragePublicDirectory(String type)
解释:返回 File ,取一个高端的公用的外部存储器文件夹来摆放某些类型的文件
方法:getExternalStorageState()
解释:返回 File 。获取外部存储设备的当前状态
方法:getRootDirectory()
解释:返回 File ,获取 Android 的根文件夹
2、StatFs 类:
StatFs 一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况
StatFs 经常用法:
getAvailableBlocks()
解释:返回 Int 。获取当前可用的存储空间
getBlockCount()
解释:返回 Int ,获取该区域可用的文件系统数
getBlockSize()
解释:返回 Int ,大小,以字节为单位,一个文件系统
getFreeBlocks()
解释:返回 Int ,该块区域剩余的空间
restat(String path)
解释:运行一个由该对象所引用的文件系统
/**在存储文件时,为了保证有充足的剩余空间大小,通常须要知道系统内部或者sdcard的存储大小。
以下提供一个工具类*/
package com.neverno.util;
import java.io.File;
import android.os.Environment;
import android.os.StatFs;
public class MemoryStatus {
static final int ERROR = -1;
/**
* 外部存储是否可用
* @return
*/
static public boolean externalMemoryAvailable() {
return android.os.Environment.getExternalStorageState().equals(
android.os.Environment.MEDIA_MOUNTED);
}
/**
* 获取手机内部可用空间大小
* @return
*/
static public long getAvailableInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}
/**
* 获取手机内部空间大小
* @return
*/
static public long getTotalInternalMemorySize() {
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
}
/**
* 获取手机外部可用空间大小
* @return
*/
static public long getAvailableExternalMemorySize() {
if (externalMemoryAvailable()) {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
} else {
return ERROR;
}
}
/**
* 获取手机外部空间大小
* @return
*/
static public long getTotalExternalMemorySize() {
if (externalMemoryAvailable()) {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long totalBlocks = stat.getBlockCount();
return totalBlocks * blockSize;
} else {
return ERROR;
}
}
static public String formatSize(long size) {
String suffix = null;
if (size >= 1024) {
suffix = "KiB";
size /= 1024;
if (size >= 1024) {
suffix = "MiB";
size /= 1024;
}
}
StringBuilder resultBuffer = new StringBuilder(Long.toString(size));
int commaOffset = resultBuffer.length() - 3;
while (commaOffset > 0) {
resultBuffer.insert(commaOffset, ‘,‘);
commaOffset -= 3;
}
if (suffix != null)
resultBuffer.append(suffix);
return resultBuffer.toString();
}
}
以上是关于Android中Environment与StatFs获取系统/SDCard存储空间大小的主要内容,如果未能解决你的问题,请参考以下文章
如何在Android中使用FFMPEG库将Youtube视频与MP4合并?
Android 如何使用 Environment.getExternalStorageDirectory()
是否有理由在iOS或Android移动设备的XF代码中使用Environment.NewLine而不是 n?