SDcardUtils

public class SDCardUtils {

private static final String EXTERNAL_STORAGE_PERMISSION = "android.permission.WRITE_EXTERNAL_STORAGE";

private SDCardUtils() {
throw new UnsupportedOperationException("cannot be instantiated");
}

/**
* 判断SDCard是否可用
*
* @return
*/
public static boolean isSDCardEnable() {
return Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
}

/**
* 获取SD卡路径
*
* @return
*/
public static String getSDCardPath() {
return Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator;
}

/**
* 获取系统存储路径
*
* @return
*/
public static String getRootDirectoryPath() {
return Environment.getRootDirectory().getAbsolutePath();
}

/**
* 获取SD卡的剩余容量 单位byte
*
* @return
*/
public static long getSDCardAllSize() {
if (isSDCardEnable()) {
StatFs stat = new StatFs(getSDCardPath());
// 获取空闲的数据块的数量
long availableBlocks = (long) stat.getAvailableBlocks() - 4;
// 获取单个数据块的大小(byte)
long freeBlocks = stat.getAvailableBlocks();
return freeBlocks * availableBlocks;
}
return 0;
}

/**
* 获取指定路径所在空间的剩余可用容量字节数,单位byte
*
* @param filePath
* @return
*/
public static long getFreeBytes(String filePath) {
// 如果是sd卡的下的路径,则获取sd卡可用容量
if (filePath.startsWith(getSDCardPath())) {
filePath = getSDCardPath();
} else {// 如果是内部存储的路径,则获取内存存储的可用容量
filePath = Environment.getDataDirectory().getAbsolutePath();
}
StatFs stat = new StatFs(filePath);
long availableBlocks = (long) stat.getAvailableBlocks() - 4;
return stat.getBlockSize() * availableBlocks;
}

/**
* 获取缓存目录
*
* @param context
* @param dirName
* @return
*/
public static File getCacheDir(Context context, String dirName) {
return getCacheDir(context, true, dirName);
}

private static File getCacheDir(Context context, boolean preferExternal, String dir) {
File appCacheDir = null;
if (preferExternal
&& MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
&& hasExternalStoragePermission(context)) {
appCacheDir = getExternalCacheDir(context, dir);
}
if (appCacheDir == null) {
appCacheDir = context.getCacheDir();
}
if (appCacheDir == null) {
String cacheDirPath = "/data/data/" + context.getPackageName()
+ "/" + dir + "/";

appCacheDir = new File(cacheDirPath);
}
return appCacheDir;
}

private static File getExternalCacheDir(Context context, String dir) {
File dataDir = new File(new File(
Environment.getExternalStorageDirectory(), "Android"), "data");
File appCacheDir = new File(
new File(dataDir, context.getPackageName()), dir);
if (!appCacheDir.exists()) {
if (!appCacheDir.mkdirs()) {
return null;
}
try {
new File(appCacheDir, ".nomedia").createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
return appCacheDir;
}

private static boolean hasExternalStoragePermission(Context context) {
int perm = context
.checkCallingOrSelfPermission(EXTERNAL_STORAGE_PERMISSION);
return perm == PackageManager.PERMISSION_GRANTED;
}
}
--------------------- 

posted @ 2019-08-09 19:24  李艳艳665  阅读(140)  评论(0编辑  收藏  举报