Android:StatFs类 获取系统/sdcard存储空间信息
在存储文件时,为了保证有充足的存储空间大小,通常需要知道系统内部或者sdcard的剩余存储空间大小,这里就需要用到StatFs类。
1. 判断 SDCard 是否存在,并且是否具有可读写权限
/**
* 外部存储是否可用 (存在且具有读写权限)
* @return
*/
staticpublicboolean isExternalStorageAvailable() {
return Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
}
/**
* 外部存储是否可用 (存在且具有读写权限)
* @return
*/
static public boolean isExternalStorageAvailable() {
return Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
}
2.获取手机系统可用空间大小
/**
* 获取手机内部可用空间大小
* @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.获取手机内部总空间大小
/**
* 获取手机内部空间大小
* @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.获取手机外部可用空间大小、获取手机外部总空间大小
/**
* 获取手机外部可用空间大小
* @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值,判断外部设置是否可以移除
Android:StatFs类 获取系统/sdcard存储空间信息的更多相关文章
- Android中StatFs获取系统/sdcard存储(剩余空间)大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- 使用Calender类获取系统时间和时间和运算
使用Calender类获取系统时间和时间和运算: @Test public void testCal(){ //使用Calender对象获取时间,并对时间进行计算: Calendar instance ...
- Android中Environment与StatFs获取系统/SDCard存储空间大小
近期想起Android开发的知识.好久没有使用了,都忘得几乎相同了,今天查看了一会资料往回捡捡,顺便写下来帮助一下须要的同学. 首先讲述一下Environment与StatFs这两个类,然后介绍它们的 ...
- Android开发之获取系统所有进程信息。
最近在做一个app,有一个进程管理模块用于管理系统中正在运行的进程,并且可以关闭进程进行加速手机的功能,基本把它实现了出来.界面的效果都是自己写的,虽然有BUG,但是基本上能满足需求,后期我会改进BU ...
- Android开发之获取系统版本号
获取系统版本号:获取当前系统的版本号: textView.setText("Product Model: " + android.os.Build.MODEL + ",& ...
- Android DisplayMetrics类获取屏幕大小
DisplayMetrics public class DisplayMetrics extends Object java.lang.Object ↳ android.util.Disp ...
- android studio应用获取系统属性权限(SystemProperties)
dependencies { provided files(getLayoutLibPath()) } /** ZhangChao time:2014-12-31,get layoutlib.jar ...
- Android 获取系统的联系人
本文主要介绍android中怎样获取系统的联系人数据 首先打开模拟器 点击联系人图标按钮 说明系统联系人数据库是空的,打开File explorer,找到data/data下面的文件夹: 将conta ...
- Android 获取系统或SDCARD剩余空间信息(转)
android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空间等等. 看下读取sd卡的:Java代码 ...
随机推荐
- centos 清理内存缓存
读写文件时,Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这就是Cache Memory(缓存内存).即使程序运行结束后,Cache Memory也不会自动释放.这就会导致程序频繁读 ...
- 关于IDW空间插值
空间插值一般都会用到IInterPolationOP接口等 首先是通过图层的名称获取图层的方法: private ILayer GetLayerByName(string name) { ...
- 最快让你上手ReactiveCocoa之进阶篇
前言 由于时间的问题,暂且只更新这么多了,后续还会持续更新本文<最快让你上手ReactiveCocoa之进阶篇>,目前只是简短的介绍了些RAC核心的一些方法,后续还需要加上MVVM+Rea ...
- 目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?以及Github的注册过程
一.目前流行的源程序版本管理软件和项目管理软件有Microsoft TFS.GitHub.SVN.Coding等. 二.各有什么优缺点 三.在GitHub注册账户的过程 Microsoft TFS的优 ...
- JavaBean和Map转换封装类
package com.ljq.util; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans. ...
- 消息队列-Kafka学习
Kafka是一个分布式的消息队列,学习见Apache Kafka文档,中文翻译见Kafka分享,一个简单的入门例子见kafka代码入门实例.本文只针对自己感兴趣的点记录下. 1.架构 Producer ...
- EF架构~豁出去了,为了IOC,为了扩展,改变以前的IRepository接口
回到目录 使用了4年的IRepository数据仓储接口,今天要改变了,对于这个数据仓储操作接口,它提倡的是简洁,单纯,就是对数据上下文的操作,而直正的数据上下文本身我们却把它忽略了,在我的IRepo ...
- [Java面试十一]数据库总结.
问题及描述: --1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course ...
- ECMAScript5中数组的方法
1.forEach()方法 遍历数组,为每个数组元素调用指定函数,三个参数分别为:数组元素 item.元素索引 index.数组本身 arr,无返回值 例: 2.map()方法 调用数组的每个元素传递 ...
- Atitit oodbms的查询,面向对象的sql查询jpa jpql hql
Atitit oodbms的查询,面向对象的sql查询jpa jpql hql 1.1. 标准API历史1 1.2. JPA定义了独特的JPQL(Java Persistence Query Lang ...