Android的智能手机各不相同,现在很多Android智能手机都是自带存储,有的还带有扩展内存的Sdcard卡槽。
在Android开发中,很多时候根据Android提供的获取SdCard存储方法获取不到不到存储目录的位置,由于Android的系统是linux系统,所以我想到使用linux命令mouunt来获取linux的挂载目录。

这样呢,基本上在Android上都可以获取到应用数据存放的目录。
使用命令获取到的目录我并没有遍历,如果你还是获取不到,可以把mount获去到的所有目录都遍历一次。

File  sdcard ;@SuppressLint("SdCardPath")    public File getSdCardFile() {        if (sdcard != null) {            return sdcard;        }        List<String> list = getExtSDCardPath();        boolean isRun = true;        if (list.size() > 0) {            sdcard = new File(list.get(list.size() - 1));            if (sdcard.isDirectory()) {                if (sdcard.getFreeSpace() == 0) {                    isRun = true;                } else {                    isRun = false;                }            }        }        if (isRun) {            sdcard = Environment.getExternalStorageDirectory();            if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {                sdcard = new File("/sdcard/");                log.e("sdcard spance:" + sdcard.getFreeSpace());                if (sdcard.getFreeSpace() == 0) {                    sdcard = new File("/sdcard1/");                    log.e("sdcard1 space:" + sdcard.getFreeSpace());                }                if (sdcard.getFreeSpace() == 0) {                    sdcard = new File("/sdcard2/");                    log.e("sdcard2 space:" + sdcard.getFreeSpace());                }            }        }        log.e("data:" + sdcard.getAbsolutePath());        return sdcard;    }    public List<String> getExtSDCardPath() {        List<String> lResult = new ArrayList<String>();        try {            Runtime rt = Runtime.getRuntime();            Process proc = rt.exec("mount");            InputStream is = proc.getInputStream();            InputStreamReader isr = new InputStreamReader(is);            BufferedReader br = new BufferedReader(isr);            String line;            while ((line = br.readLine()) != null) {                if (line.contains("extSdCard")) {                    String[] arr = line.split(" ");                    String path = arr[1];                    if (path.lastIndexOf("extSdCard") == path.length() - 9) {                        File file = new File(path);                        if (file.isDirectory()) {                            lResult.add(path);                        }                    }                } else if (line.contains("/sdcard")) {                    String[] arr = line.split(" ");                    String path = arr[1];                    if (path.lastIndexOf("/sdcard") == path.length() - 6) {                        File file = new File(path);                        if (file.isDirectory()) {                            lResult.add(path);                        }                    } else {                        String number = path.substring(path.lastIndexOf("/sdcard") + 7);                        try {                            Integer.parseInt(number);                            File file = new File(path);                            if (file.isDirectory()) {                                lResult.add(path);                            }                        } catch (Exception e) {                        }                    }                }            }            isr.close();        } catch (Exception e) {        }        return lResult;    }

不过,首选获取存储还是先使用Android提供的方法,判断并获取Sdcard目录。

//判断sdcard是否存在Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);//如果存在,获取存储File目录Environment.getExternalStorageDirectory();

希望可以帮助到大家,对你有帮助或者觉得值得借鉴的,可以在下方点个赞!谢谢!!!
如有转载请著名来自http://blog.csdn.net/qxs965266509

更多相关文章

  1. android中的坐标系以及获取坐标的方法
  2. Android画图学习总结(一)——类的简介
  3. Android(安卓)中 ProgressBar 和 AlertDialog 的加载的基本使用
  4. Android获取本机电话号码的简单方法
  5. Android(安卓)安装环境搭建
  6. Android5.x+ 格式化外部存储(u盘, sdcard)的方法
  7. Android获取设备ID号
  8. android锁屏唤醒并解锁屏幕
  9. android 时间获取以及时间格式化

随机推荐

  1. android 百度地图 定位获取位置失败 62错
  2. 2010.12.28(4)——— android tab 过多的
  3. 找不到android系统库的解决方案
  4. android sdk Content Loader's has encou
  5. 深入ListView
  6. Android(安卓)Listener侦听的N种写法
  7. Android(安卓)Apk签名
  8. Android(安卓)AsyncTask问题
  9. Android应用程序中Activity的生命周期
  10. Android布局居中的几种做法