SD卡的帮助类 SDCardHelper



import android.content.Context;
import android.os.Environment;
import android.os.StatFs;

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;

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卡的自定义目录下保存文件
   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();
   }

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值