public class FileSizeUtil { private static final int ERROR = -1; /** * SDCARD是否存 */ public static boolean externalMemoryAvailable() { return android.os.Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED); } /** * 获取手机内部剩余存储空间 * * @return */ public static long getAvailableInternalMemorySize() { File path = Environment.getDataDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long availableBlocks = stat.getAvailableBlocks(); return availableBlocks * blockSize; } /** * 获取手机内部总的存储空间 * * @return */ public static long getTotalInternalMemorySize() { File path = Environment.getDataDirectory(); StatFs stat = new StatFs(path.getPath()); long blockSize = stat.getBlockSize(); long totalBlocks = stat.getBlockCount(); return totalBlocks * blockSize; } /** * 获取SDCARD剩余存储空间 * * @return */ public static 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; } } /** * 获取SDCARD总的存储空间 * * @return */ public static 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; } } /** * 获取系统总内存 * * @param context 可传入应用程序上下文。 * @return 总内存大单位为B。 */ public static long getTotalMemorySize(Context context) { String dir = "/proc/meminfo"; try { FileReader fr = new FileReader(dir); BufferedReader br = new BufferedReader(fr, 2048); String memoryLine = br.readLine(); String subMemoryLine = memoryLine.substring(memoryLine.indexOf("MemTotal:")); br.close(); return Integer.parseInt(subMemoryLine.replaceAll("\\D+", "")) * 1024l; } catch (IOException e) { e.printStackTrace(); } return 0; } /** * 获取当前可用内存,返回数据以字节为单位。 * * @param context 可传入应用程序上下文。 * @return 当前可用内存单位为B。 */ public static long getAvailableMemory(Context context) { ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); am.getMemoryInfo(memoryInfo); return memoryInfo.availMem; } private static DecimalFormat fileIntegerFormat = new DecimalFormat("#0"); private static DecimalFormat fileDecimalFormat = new DecimalFormat("#0.#"); /** * 单位换算 * * @param size 单位为B * @param isInteger 是否返回取整的单位 * @return 转换后的单位 */ public static String formatFileSize(long size, boolean isInteger) { DecimalFormat df = isInteger ? fileIntegerFormat : fileDecimalFormat; String fileSizeString = "0M"; if (size < 1024 && size > 0) { fileSizeString = df.format((double) size) + "B"; } else if (size < 1024 * 1024) { fileSizeString = df.format((double) size / 1024) + "K"; } else if (size < 1024 * 1024 * 1024) { fileSizeString = df.format((double) size / (1024 * 1024)) + "M"; } else { fileSizeString = df.format((double) size / (1024 * 1024 * 1024)) + "G"; } return fileSizeString; } }