在存储文件时,为了保证有充足的剩余空间大小,通常需要知道系统内部或者sdcard的存储大小。下面提供一个工具类,记得是从网站搜的。
package
com.orgcent.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 ( ) ;
}
}
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 ( ) ;
}
}