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中遍历文件夹、比较文件类型测试
  4. android文件缓存,并SD卡创建目录未能解决和bitmap内存溢出解决
  5. Android基础分析目录
  6. Android SDK中 tools 目录下的工具介绍
  7. 第二讲:Android系统构架分析和应用程序目录结构分析
  8. android -- 多级目录创建
  9. Android系列教程之四:Android项目的目录结构

随机推荐

  1. Android创建Native Binder Service
  2. Android(安卓)项目中文件夹作用(res文件
  3. Android(安卓)利用 APT 技术在编译期生成
  4. android 对话框AlertDialog
  5. Android(安卓)studio如何用真机调试,只需
  6. 动态实现隐藏标题栏
  7. Android 之 调用短信界面
  8. Android 时间滚动控件
  9. Android 文件打开方式
  10. Android上实现zlib解压缩的方法 Inflater