Environment与StatFs


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;
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值