【问题标题】:Android How to get the root directory from a file (path)Android 如何从文件中获取根目录(路径)
【发布时间】:2016-09-21 20:57:21
【问题描述】:

如何获取任意路径的根目录。如果我有文件路径 /storage/emulated/0/Android/media/com.google.android.talk/Ringtones/,我返回根目录“storage”的最佳方式是什么。

文件路径是否始终为“/”格式,根据字符“/”分割路径是否安全,或者是否有可以调用的内置函数?

我需要创建一个方法来返回安卓手机上所有音频文件的根文件。

这里有一些路径,我想从根目录开始,然后用音频文件浏览每个目录,那么有没有我可以调用的内置方法来返回第一个目录?

/storage/emulated/0/media/audio/ringtones/abc.mp3
/storage/emulated/0/Music/Various Artists/music.mp3
/storage/emulated/0/new/Artists/test.mp3

谢谢。

【问题讨论】:

  • 你认为你给出的示例路径的根目录是什么?
  • 将“存储”作为根路径。
  • 我认为您无法直接访问/storage/storage/emulated/0 是 SD 卡
  • 所有安卓SD卡都以路径/storage/emulated/0开头吗?我不需要直接访问 /storage 。我需要创建一个包含所有音频文件的方法并返回它们的根目录。
  • /storage/emulated/0Environment.getExternalStorageDirectory() 将在 Nexus 设备上返回的内容。永远不要硬编码路径,因为它们在不同的设备上有所不同

标签: java android filepath android-file


【解决方案1】:

您的建议可行。一种方法是使用带有 indexOf 的子字符串。

rootPath = string.substring(0, string.indexOf("/")); 

【讨论】:

    【解决方案2】:

    您可以从“.apk”访问根文件夹,如下所示:

    java.io.File dir = new java.io.File("/storage/emulated/0");

    并且,可以创建子文件夹:

    void CreateDir() throws IOException {
        java.io.File dir = new java.io.File("/storage/emulated/0/MyApplication");
        dir.mkdir();
    }
    

    通常,您必须具有写入权限才能执行此操作:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    

    但问题始于 Android 10(API 级别 29)及更高版本。每个路径都是null

    为了改善用户隐私,不推荐直接访问共享/外部存储设备。当应用以 Build.VERSION_CODES.Q 为目标时,从此方法返回的路径不再可供应用直接访问。

    【讨论】:

      猜你喜欢
      • 2015-10-29
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      相关资源
      最近更新 更多