package xyz.yhsj.yhutils.io; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import xyz.yhsj.yhutils.logutils.LogUtils; import android.content.Context; import android.os.Environment; import android.os.StatFs; /** * 内存卡 工具类<br> */ public class SDCardUtils { /** * 判断SDCard是否可用 */ public static boolean isSDCardEnable() { boolean result = Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED); if (result) LogUtils.i("当前内存卡有效"); else LogUtils.i("当前内存卡无效"); return result; } /** * 获取SD卡路径 */ public static ArrayList<String> getSDCardPathEx() { ArrayList<String> list = new ArrayList<String>(); try { Runtime runtime = Runtime.getRuntime(); Process proc = runtime.exec("mount"); InputStream is = proc.getInputStream(); InputStreamReader isr = new InputStreamReader(is); String line; BufferedReader br = new BufferedReader(isr); while ((line = br.readLine()) != null) { if (line.contains("secure")) { continue; } if (line.contains("asec")) { continue; } if (line.contains("fat")) { String columns[] = line.split(" "); if (columns.length > 1) { list.add("*" + columns[1]); } } else if (line.contains("fuse")) { String columns[] = line.split(" "); if (columns.length > 1) { list.add(columns[1]); } } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return list; } /** * 获取外部存储设备的总空间大小 */ public static long getSDCardTotalSize(Context context) { if (isSDCardEnable()) { // 得到一个外部存储设备的目录/通过getPath得到路径 File path = Environment.getExternalStorageDirectory(); // 文件系统的帮助类,传入一个路径可以得到路径的信息 StatFs stat = new StatFs(path.getPath()); // 得到该存储空间每一块存储空间的大小 long blockSize = stat.getBlockSize(); // 得到空间总个数 long totalBlocks = stat.getBlockCount(); // 得到总空间大小 long totalSize = totalBlocks * blockSize; // String totalStr = Formatter.formatFileSize(context, totalSize); return totalSize; } return 0; } /** * 获取外部存储设备的剩余空间大小 */ public static long getSDCardAvailSize(Context context) { if (isSDCardEnable()) { // 得到一个外部存储设备的目录/通过getPath得到路径 File path = Environment.getExternalStorageDirectory(); // 文件系统的帮助类,传入一个路径可以得到路径的信息 StatFs stat = new StatFs(path.getPath()); // 得到该存储空间每一块存储空间的大小 long blockSize = stat.getBlockSize(); // 得到可用的空间个数 long availableBlocks = stat.getAvailableBlocks(); // 得到可用空间大小 long availSize = availableBlocks * blockSize; // String availStr = Formatter.formatFileSize(context, availSize); return availSize; } return 0; } /** * 获取内部存储设备的总空间大小 * * @param context * @return */ public static long getRomSpaceTotalSize(Context context) { if (isSDCardEnable()) { // 得到一个内部存储设备的目录/通过getPath得到路径 File path = Environment.getDataDirectory(); // 文件系统的帮助类,传入一个路径可以得到路径的信息 StatFs stat = new StatFs(path.getPath()); // 得到该存储空间每一块存储空间的大小 long blockSize = stat.getBlockSize(); // 得到空间总个数 long totalBlocks = stat.getBlockCount(); // 得到总空间大小 long totalSize = totalBlocks * blockSize; // String totalStr = Formatter.formatFileSize(context, totalSize); return totalSize; } return 0; } /** * 获取内部存储设备的剩余空间大小 * * @param context * @return */ public static long getRomSpaceAvailSize(Context context) { if (isSDCardEnable()) { // 得到一个内部存储设备的目录/通过getPath得到路径 File path = Environment.getDataDirectory(); // 文件系统的帮助类,传入一个路径可以得到路径的信息 StatFs stat = new StatFs(path.getPath()); // 得到该存储空间每一块存储空间的大小 long blockSize = stat.getBlockSize(); // 得到可用的空间个数 long availableBlocks = stat.getAvailableBlocks(); // 得到可用空间大小 long availSize = availableBlocks * blockSize; // String availStr = Formatter.formatFileSize(context, availSize); return availSize; } return 0; } /** * 获取系统存储路径 * * @return */ public static String getRootDirectoryPath() { String path = Environment.getRootDirectory().getAbsolutePath(); LogUtils.i("当前存储路径:" + path); return path; } /** * 判断SDCard是否已满 * * @return */ @SuppressWarnings({"deprecation", "unused"}) public static boolean isSDCardSizeOverflow() { boolean result = false; // 取得SDCard当前的状态 String sDcString = Environment.getExternalStorageState(); if (sDcString.equals(Environment.MEDIA_MOUNTED)) { // 取得sdcard文件路径 File pathFile = Environment .getExternalStorageDirectory(); StatFs statfs = new StatFs(pathFile.getPath()); // 获取SDCard上BLOCK总数 long nTotalBlocks = statfs.getBlockCount(); // 获取SDCard上每个block的SIZE long nBlocSize = statfs.getBlockSize(); // 获取可供程序使用的Block的数量 long nAvailaBlock = statfs.getAvailableBlocks(); // 获取剩下的所有Block的数量(包括预留的一般程序无法使用的块) long nFreeBlock = statfs.getFreeBlocks(); // 计算SDCard 总容量大小MB long nSDTotalSize = nTotalBlocks * nBlocSize / 1024 / 1024; // 计算 SDCard 剩余大小MB long nSDFreeSize = nAvailaBlock * nBlocSize / 1024 / 1024; if (nSDFreeSize <= 1) { result = true; } }// end of if // end of func return result; } }