package com.example.retrofitdemo; import android.content.Context; import android.os.Environment; import android.os.StatFs; import android.util.Log; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class SDCardHelper { // 判断SD卡是否被挂载 public static boolean isSDCardMounted() { // return Environment.getExternalStorageState().equals("mounted"); return Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED); } // 获取SD卡的跟路径 public static String getSDCardBaseDir() { if (isSDCardMounted()) { return Environment.getExternalStorageDirectory().getAbsolutePath(); } return ""; } // 获取SD卡的完整空间大小,返回MB public static long getSDCardSize() { if (isSDCardMounted()) { StatFs fs = new StatFs(getSDCardBaseDir()); int count = fs.getBlockCount(); int size = fs.getBlockSize(); return count * size / 1024 / 1024; } return 0; } // 获取SD卡的剩余空间大小,返回MB public static long getSDCardFreeSize() { if (isSDCardMounted()) { StatFs fs = new StatFs(getSDCardBaseDir()); int count = fs.getFreeBlocks(); int size = fs.getBlockSize(); return count * size / 1024 / 1024; } return 0; } // 获取SD卡的可用空间大小,返回MB public static long getSDCardAvailableSize() { if (isSDCardMounted()) { StatFs fs = new StatFs(getSDCardBaseDir()); int count = fs.getAvailableBlocks(); int size = fs.getBlockSize(); return count * size / 1024 / 1024; } return 0; } // 往SD卡的公有目录下保存文件 public static boolean saveFileToSDCardPublicDir(byte[] data, String type, String fileName) { BufferedOutputStream bos = null; if (isSDCardMounted()) { File file = Environment .getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES); // Log.i("SDCardHelper", "--->" + file.getAbsolutePath()); try { bos = new BufferedOutputStream(new FileOutputStream(new File( file, fileName))); bos.write(data); bos.flush(); return true; } catch (Exception e) { e.printStackTrace(); } finally { try { if (bos != null) { bos.close(); } } catch (IOException e) { e.printStackTrace(); } } } return false; } // 往SD卡的私有Files目录下保存文件 public static boolean saveFileToSDCardPrivateFilesDir(byte[] data, String type, String fileName, Context context) { BufferedOutputStream bos = null; if (isSDCardMounted()) { File file = context.getExternalFilesDir(type); try { bos = new BufferedOutputStream(new FileOutputStream(new File( file, fileName))); bos.write(data); bos.flush(); return true; } catch (Exception e) { e.printStackTrace(); } finally { try { if (bos != null) { bos.close(); } } catch (IOException e) { e.printStackTrace(); } } } return false; } // 往SD卡的私有Cache目录下保存文件 public static boolean saveFileToSDCardPrivateCacheDir(byte[] data, String fileName, Context context) { BufferedOutputStream bos = null; if (isSDCardMounted()) { File file = context.getExternalCacheDir(); try { bos = new BufferedOutputStream(new FileOutputStream(new File( file, fileName))); bos.write(data); bos.flush(); return true; } catch (Exception e) { e.printStackTrace(); } finally { try { if (bos != null) { bos.close(); } } catch (IOException e) { e.printStackTrace(); } } } return false; } // 往SD卡的私有Cache目录下保存文件 public static boolean saveFileToSDCardPrivateCacheDir(InputStream in, String fileName, Context context) { BufferedOutputStream bos = null; BufferedInputStream bis=null; if (isSDCardMounted()) { File file = context.getExternalCacheDir(); String absolutePath = context.getExternalCacheDir().getAbsolutePath(); Log.e("TAG", "saveFileToSDCardPrivateCacheDir: "+absolutePath ); try { bis=new BufferedInputStream(in); bos = new BufferedOutputStream(new FileOutputStream(new File( file, fileName))); byte[] buffer=new byte[1024*8]; int c=0; while((c=bis.read(buffer))!=-1){ bos.write(buffer,0,c); bos.flush(); } return true; } catch (Exception e) { e.printStackTrace(); } finally { try { if (bos != null) { bos.close(); } if(bis!=null){ bis.close(); } } catch (IOException e) { e.printStackTrace(); } } } return false; } // 往SD卡的自定义目录下保存文件 public static boolean saveFileToSDCardCustomDir(byte[] data, String dir, String fileName) { BufferedOutputStream bos = null; if (isSDCardMounted()) { File file = new File(getSDCardBaseDir() + File.separator + dir); if (!file.exists()) { file.mkdirs(); } try { bos = new BufferedOutputStream(new FileOutputStream(new File( file, fileName))); bos.write(data); bos.flush(); return true; } catch (Exception e) { e.printStackTrace(); } finally { try { if (bos != null) { bos.close(); } } catch (IOException e) { e.printStackTrace(); } } } return false; } // 从SD卡获取文件 public static byte[] loadFileFromSDCard(String filePath) { BufferedInputStream bis = null; ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { bis = new BufferedInputStream(new FileInputStream( new File(filePath))); byte[] buffer = new byte[1024 * 8]; int c = 0; while ((c = bis.read(buffer)) != -1) { baos.write(buffer, 0, c); baos.flush(); } return baos.toByteArray(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (bis != null) { bis.close(); } if (baos != null) { baos.close(); } } catch (IOException e) { e.printStackTrace(); } } return null; } // 获取SD卡公有目录的路径 public static String getSDCardPublicDir(String type) { return Environment.getExternalStoragePublicDirectory(type) .getAbsolutePath(); } // 获取SD卡私有Cache目录的路径 public static String getSDCardPrivateCacheDir(Context context) { return context.getExternalCacheDir().getAbsolutePath(); } // 获取SD卡私有Files目录的路径 public static String getSDCardPrivateFilesDir(Context context, String type) { return context.getExternalFilesDir(type).getAbsolutePath(); } }
android SD卡帮助类
猜你喜欢
转载自blog.csdn.net/yijiaodingqiankun/article/details/78086431
今日推荐
周排行