Environment.getExternalStorageState()获取外部存储设备的状态
Environment.MEDIA_CHECKING 表明对象正在磁盘检查
Environment.MEDIA_EJECTING
Environment.MEDIA_MOUNTED 表明对象存在并具有读/写权限
Environment.MEDIA_MOUNTED_READ_ONLY表明对象权限为只读
Environment.MEDIA_NOFS表明对象为空白或正在使用不受支持的文件系统
Environment.MEDIA_REMOVED如果不存在 SDCard
Environment.MEDIA_SHARED如果 SDCard 未安装 ,并通过 USB 大容量存储共享
Environment.MEDIA_UNKNOWN 介质未知
Environment.MEDIA_UNMOUNTABLE SDCard 不可被安装 如果 SDCard 是存在但不可以被安装
Environment.MEDIA_BAD_REMOVAL;表明SDCard 被卸载前己被移除
Environment.MEDIA_UNMOUNTED SDCard 已卸掉如果 SDCard 是存在但是没有被安装
获取公共目录:Environment.getExternalStoragePublicDirectory(String type)
Environment.DIRECTORY_ALARMS 系统提醒铃声存放的标准目录。
Environment.DIRECTORY_DCIM 相机拍摄照片和视频的标准目录。
Environment.DIRECTORY_DOWNLOADS 下载的标准目录。
Environment.DIRECTORY_MOVIES 电影存放的标准目录。
Environment.DIRECTORY_MUSIC 音乐存放的标准目录。
Environment.DIRECTORY_NOTIFICATIONS 系统通知铃声存放的标准目录。
Environment.DIRECTORY_PICTURES 图片存放的标准目录
Environment.DIRECTORY_PODCASTS 系统广播存放的标准目录。
Environment.DIRECTORY_RINGTONES 系统铃声存放的标准目录。
Environment.DIRECTORY_DOCUMENTS文档
获取私有目录,获得外部存储媒体目录:File Environment.getExternalStorageDirectory()(/mnt/sdcard or /storage/sdcard0)
获取下载缓存目录:File Environment.getDownloadCacheDirectory()(/cache)
获得data的目录static File getDataDirectory() (/data)。
获得系统主目录 File getRootDirectory() (/system)
StatFs 类:
StatFs 一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况
StatFs 常用方法:
getAvailableBlocks() 返回 Int ,获取当前可用的存储空间
getBlockCount() 返回 Int ,获取该区域可用的文件系统数
getBlockSize() 返回 Int ,大小,以字节为单位,一个文件系统
getFreeBlocks() 返回 Int ,该块区域剩余的空间
restat(String path) 执行一个由该对象所引用的文件系统
package com.outdoors.jinghuang.demo;
import android.content.Context;
import android.os.Environment;
import android.os.StatFs;
import android.util.Log;
import java.io.File;
import java.util.Stack;
/**
* Created by jing.huang on 2016/12/8.
*/
public class EnvironmentDemo {
/**
* 判断SdCard是否可用,是否可读写
*
* @return
*/
public static boolean isSdCardUseful() {
return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState());
}
/**
* 判断sdcard是否只可读
*
* @return
*/
public static boolean isCanReadAble() {
return Environment.MEDIA_MOUNTED_READ_ONLY.equals(Environment.getExternalStorageState());
}
/**
* 在外部存储设备上创建文件夹
* 注意:
* getExternalStoragePublicDirectory()的参数只能是Environment API常数提供的目录名称
* 这些目录名称可确保系统正确处理文件。
* 例如,保存在 DIRECTORY_RINGTONES 中的文件由系统媒体扫描程序归类为铃声,而不是音乐。
*
* @param name
* @return /外部存储根目录/Pictures/name
*/
public static File makePublicDir(String name) {
File directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File file = new File(directory, name);
//判断文件是否存在
if (!file.exists()) {
file.mkdirs();
}
return file;
}
/**
* 在外部存储上保存私有文件:创建个人相册的目录
* 注意
* getExternalFilesDir()的参数只能是Environment API常数提供的目录名称
* 如果没有适合您的名称,可以传null,这将返回外部存储上您的应用的专用目录的根目录
*
* @return /外部存储根目录/Android/data/package_name/Pictures/albumName
*/
public static File getAlbumStorageDir(Context context, String albumName) {
File file = new File(context.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
Log.e("LOG_TAG", "Directory not created");
}
return file;
}
/**
* 获得外部存储根目录
*
* @return
*/
public static File getStorageRootDir() {
return Environment.getExternalStorageDirectory();
}
/**
* 获取外部存储设备缓存目录
*
* @return
*/
public static File getStorageCacheDir(Context context) {
return context.getExternalCacheDir();
}
/**
* 获取手机内部可用空间大小
* @return
*/
static public long getAvailableInternalMemorySize() {
String path = Environment.getDataDirectory().getPath();
StatFs statFs = new StatFs(path);
long blockSize = statFs.getBlockSize();
long availableBlocks = statFs.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 (isSdCardUseful()) {
File path = Environment.getExternalStorageDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
return availableBlocks * blockSize;
}else {
return -1L;
}
}
}