Android使用Linux mount获取SdCard存储文件夹

简介:

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





本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5285979.html,如需转载请自行联系原作者

相关文章
|
存储 关系型数据库 MySQL
Linux 安装 mysql 及配置存储位置
Linux 安装 mysql 及配置存储位置
301 3
|
7月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
1363 77
|
7月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
12月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
1988 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
11月前
|
Java Linux Android开发
深入探索Android系统架构:从Linux内核到应用层
本文将带领读者深入了解Android操作系统的复杂架构,从其基于Linux的内核到丰富多彩的应用层。我们将探讨Android的各个关键组件,包括硬件抽象层(HAL)、运行时环境、以及核心库等,揭示它们如何协同工作以支持广泛的设备和应用。通过本文,您将对Android系统的工作原理有一个全面的认识,理解其如何平衡开放性与安全性,以及如何在多样化的设备上提供一致的用户体验。
|
12月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
374 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
12月前
|
Ubuntu Linux Windows
linux 挂载硬盘报错 "mount: unknown filesystem type 'ntfs'"
【10月更文挑战第7天】在Linux系统中挂载硬盘时遇到“mount: unknown filesystem type &#39;ntfs&#39;”错误,是因为Linux默认可能不支持NTFS文件系统。本文提供了解决方案:安装NTFS-3G软件包以支持NTFS,并检查内核是否已加载NTFS模块。对于Ubuntu/Debian系统,可使用`sudo apt-get install ntfs-3g`命令;对于CentOS/RHEL系统,则需先安装EPEL仓库再安装NTFS-3G。此外,还需确认硬盘设备名正确无误,并创建合适的挂载点目录。
2572 2
|
存储 安全 Linux
在Linux中,日志文件通常存储在哪些目录?
在Linux中,日志文件通常存储在哪些目录?
|
存储 安全 API
Android经典实战之存储方案对比:SharedPreferences vs MMKV vs DataStore
本文介绍了 Android 开发中常用的键值对存储方案,包括 SharedPreferences、MMKV 和 DataStore,并对比了它们在性能、并发处理、易用性和稳定性上的特点。通过实际代码示例,帮助开发者根据项目需求选择最适合的存储方案,提升应用性能和用户体验。
716 1
|
存储 网络协议 搜索推荐
在Linux中,如何配置和管理虚拟机的网络和存储?
在Linux中,如何配置和管理虚拟机的网络和存储?

热门文章

最新文章