Android:StatFs类 获取系统/sdcard存储空间信息

在存储文件时,为了保证有充足的存储空间大小,通常需要知道系统内部或者sdcard的剩余存储空间大小,这里就需要用到StatFs类。

1. 判断 SDCard 是否存在,并且是否具有可读写权限 

[java] view plaincopyprint?

/**

* 外部存储是否可用 (存在且具有读写权限)

* @return

*/ 

staticpublicboolean isExternalStorageAvailable() { 

    return Environment.getExternalStorageState().equals( 

            Environment.MEDIA_MOUNTED); 

     /**
     * 外部存储是否可用 (存在且具有读写权限)
     * @return
     */
    static public boolean isExternalStorageAvailable() {
        return Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED);
    }

2.获取手机系统可用空间大小

 

[java] view plaincopyprint?

/**

* 获取手机内部可用空间大小

* @return

*/ 

staticpubliclong 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 getAvailableInternalMemorySize() {
        File path = Environment.getDataDirectory();
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSize();
        long availableBlocks = stat.getAvailableBlocks();
        return availableBlocks * blockSize;
    }

 

 

3.获取手机内部总空间大小

[java] view plaincopyprint?

/**

* 获取手机内部空间大小

* @return

*/ 

staticpubliclong getTotalInternalMemorySize() { 

    File path = Environment.getDataDirectory();//Gets the Android data directory 

    StatFs stat = new StatFs(path.getPath()); 

    long blockSize = stat.getBlockSize();      //每个block 占字节数 

    long totalBlocks = stat.getBlockCount();   //block总数 

    return totalBlocks * blockSize; 

    /**
     * 获取手机内部空间大小
     * @return
     */
    static public long getTotalInternalMemorySize() {
        File path = Environment.getDataDirectory();//Gets the Android data directory
        StatFs stat = new StatFs(path.getPath());
        long blockSize = stat.getBlockSize();      //每个block 占字节数
        long totalBlocks = stat.getBlockCount();   //block总数
        return totalBlocks * blockSize;
    }

4.获取手机外部可用空间大小、获取手机外部总空间大小

[java] view plaincopyprint?

/**

    * 获取手机外部可用空间大小

    * @return

    */ 

   staticpubliclong getAvailableExternalMemorySize() { 

       if (isExternalStorageAvailable()) { 

           File path = Environment.getExternalStorageDirectory();//获取SDCard根目录 

           StatFs stat = new StatFs(path.getPath()); 

           long blockSize = stat.getBlockSize(); 

           long availableBlocks = stat.getAvailableBlocks(); 

           return availableBlocks * blockSize; 

       } else { 

           return -1; 

       } 

   } 

 

   /**

    * 获取手机外部总空间大小

    * @return

    */ 

   staticpubliclong getTotalExternalMemorySize() { 

       if (isExternalStorageAvailable()) { 

           File path = Environment.getExternalStorageDirectory(); //获取SDCard根目录 

           StatFs stat = new StatFs(path.getPath()); 

           long blockSize = stat.getBlockSize(); 

           long totalBlocks = stat.getBlockCount(); 

           return totalBlocks * blockSize; 

       } else { 

           return -1; 

       } 

   } 

 /**
     * 获取手机外部可用空间大小
     * @return
     */
    static public long getAvailableExternalMemorySize() {
        if (isExternalStorageAvailable()) {
            File path = Environment.getExternalStorageDirectory();//获取SDCard根目录
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSize();
            long availableBlocks = stat.getAvailableBlocks();
            return availableBlocks * blockSize;
        } else {
            return -1;
        }
    }

    /**
     * 获取手机外部总空间大小
     * @return
     */
    static public long getTotalExternalMemorySize() {
        if (isExternalStorageAvailable()) {
            File path = Environment.getExternalStorageDirectory(); //获取SDCard根目录
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSize();
            long totalBlocks = stat.getBlockCount();
            return totalBlocks * blockSize;
        } else {
            return -1;
        }
    }

 

 

注意: 访问SDCard进行文件读写时:

 

在AndroidManifest.xml中加入访问SDCard的权限如下:

<!-- 在SDCard中创建与删除文件权限 -->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<!-- 往SDCard写入数据权限 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

接着我们在使用SDcard进行读写的时候 会用到Environment类下面的几个静态方法:

1:getDataDirectory()         获取到Android中的data数据目录

2:getDownloadCacheDirectory() 获取到下载的缓存目录

3:getExternalStorageDirectory()     获取到外部存储的目录 一般指SDcard

4:getExternalStorageState()           获取外部设置的当前状态 一般指SDcard,

android系统中对于外部设置的状态,比较常用的是 MEDIA_MOUNTED(SDcard存在且可以进行读写) MEDIA_MOUNTED_READ_ONLY (SDcard存在,只可以进行读操作) 当然还有其他的一些状态,可以在文档中进行查找到。

5:getRootDirectory()                   获取到Android Root路径

6:isExternalStorageEmulated()    返回Boolean值判断外部设置是否有效

7:isExternalStorageRemovable() 返回Boolean值,判断外部设置是否可以移除

时间: 2024-09-24 11:52:02

Android:StatFs类 获取系统/sdcard存储空间信息的相关文章

Android编程实现获取系统内存、CPU使用率及状态栏高度的方法示例

本文实例讲述了Android编程实现获取系统内存.CPU使用率及状态栏高度的方法.分享给大家供大家参考,具体如下: DeviceInfoManage类用于获取系统的内存,CPU的信息,以及状态栏的高度 import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReade

android 设置 输入法-android中如何获取系统已安装的输入法,并且要获取到输入法的名称

问题描述 android中如何获取系统已安装的输入法,并且要获取到输入法的名称 android中如何获取系统已安装的输入法,并且要获取到输入法的名称,求大神解答,自己试没有一点思路 解决方案 Android 获取输入法高度使EditText不获取焦点(Android中系统输入法不主动弹出)Android EditText获取焦点,弹起输入法 解决方案二: http://zhidao.baidu.com/link?url=Eaqh-dK8MgbCAwbvhkfi3WZgivws33FYoeYTTF

android-Android中为何获取系统时间的方法多次执行后时间仍不变

问题描述 Android中为何获取系统时间的方法多次执行后时间仍不变 我自定义了一个view,每次这个view一触碰,就执行方法calendar.get(calendar.second);来获取当前系统秒数,可是每一次触碰后,在MotionEvent.action_down下,系统秒数都是第一次执行后得到的结果,这是为什么?此方法重新执行,不理性得到最新的秒数吗, 解决方案 我觉得问题是因为,你只初始化了一次Calender calender =Calender.getInstance(),而以

解析Android获取系统cpu信息,内存,版本,电量等信息的方法详解_Android

Android获取系统cpu信息,内存,版本,电量等信息 1.CPU频率,CPU信息:/proc/cpuinfo和/proc/stat 通过读取文件/proc/cpuinfo系统CPU的类型等多种信息.读取/proc/stat 所有CPU活动的信息来计算CPU使用率 下面我们就来讲讲如何通过代码来获取CPU频率: 复制代码 代码如下: package com.orange.cpu; import java.io.BufferedReader;import java.io.FileNotFound

Android学习笔记(37):用Configuration类获取和监听设备信息

Configuration类用于描述手机设备上的配置信息.有时候我们的app需要获取手机的系统信息,并根据手机的信息来调整我们的app,这时候我们就需要用到Configuration类.   (1)获取Configuration对象 调用Activity的方法获取系统的Configuration对象: Configuration config = getResources().getConfiguration();   (2)获取设备系统信息 在获取了Configuration对象之后,直接访问

我的Android进阶之旅------&amp;gt;使用ThumbnailUtils类获取视频的缩略图

今天看了一段代码,是关于获取视频的缩略图的,让我认识了一个ThumbnailUtils类,代码如下. Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path, Thumbnails.MINI_KIND); //用于获取视频的缩略图 BitmapDrawable background=new BitmapDrawable(bitmap); 通过察看android.media.ThumbnailUtils的源码,可以发现该类提供了三种静态方法

Android 用Time和Calendar获取系统当前时间源码分享(年月日时分秒周几)

概述 用Time和Calendar获取系统当前时间(年月日时分秒周几) 效果图 源码: import android.app.Activity; import android.os.Bundle; import android.text.format.Time; import android.view.View; import android.widget.RelativeLayout; import android.widget.TextView; import java.util.Calen

Android获取系统时间的多种方法

Android中获取系统时间有多种方法,可分为Java中Calendar类获取,java.util.date类实现,还有android中Time实现. 现总结如下: 方法一: void getTime1(){ long time=System.currentTimeMillis();//long now = android.os.SystemClock.uptimeMillis(); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd

Android获取系统储存以及内存信息的方法(一)

众所周知,Android的手机上的信息大部分都是可以通过代码获取的,比如说爱奇艺的离线储存功能上有一个最大储存大小/剩余储存大小的功能. 获取SD卡上的储存信息: /** * 获得SD卡总大小 * * @return */ private String getSDTotalSize() { File path = Environment.getExternalStorageDirectory(); StatFs stat = new StatFs(path.getPath()); long bl