【问题标题】:Kotlin: Reading all the files from a folder in the SD cardKotlin:从 SD 卡中的文件夹中读取所有文件
【发布时间】:2021-07-21 09:28:23
【问题描述】:

我是 android 开发的初学者。我正在做一个项目,我必须读取 sdcard 文件夹内名为 Audio 的文件夹中的所有音频文件。我一直在查看其他问题,发现很多人使用 getExternalStorageDirectory() 获取目录路径并使用 listFiles 遍历文件夹/目录中的所有文件。但我发现 getExternalStorageDirectory() 已弃用。我猜 getExternalFileDir() 是替代方案,但我无法理解如何使用它。我已经被这个问题困了几个小时了,任何帮助都将不胜感激。

在看到建议后,我对代码进行了这些更改,我还将文件夹更改为 Audiobook 并将我的文件放在那里

 fun getaudio(){
              val dir: File = File("/sdcard/Audiobooks/01 Furies of Calderon")

              if (dir.exists()) { 
                  var files = dir.listFiles()
                 Log.d("mytag","No of files is ${files.size}")


              }


但是这里的文件返回空的大小为零我也在我的清单文件中授予了权限,但它仍然无法正常工作。 下面是我的目录结构的一个ss

【问题讨论】:

  • 您是否创建了音频文件夹,或者您尚未创建要从中读取的文件夹?
  • 只需使用所需音频文件夹的完整路径。它只能有一个完整路径,因此讨论 getExternalFilesDir 作为替代是没有意义的。你必须想出正确的道路。
  • I have to read all the audio files present in a folder named Audio inside the sdcard folder. 不清楚你对 sdcard 的意思。可移动的micro sd卡?你为什么不告诉我们完整的路径?
  • 完整路径是:/sdcard/Audio,是的,我已经创建了文件夹
  • 那么知道完整路径有什么问题呢?只需使用 File.listFiles()。它与 /storage/emulated/0/Audio 的路径相同。所以你可以使用 getExternalStorageDirectory()。

标签: android file kotlin


【解决方案1】:
 val directory: File = File(
             Environment.getExternalStorageDirectory().getAbsolutePath() +
File.separator + fileName

            //File location
        )

        if (directory.exists()) {

            val files: Array<File> = directory.listFiles()!!

            for (i in files.indices) {
            //do whatever you want to
            }

        }

您应该使用与插入相同的文件路径。您不需要为此目的使用 externalMediaDirs 。

为方便起见,您还可以使用 Apache Common IO 库并在一行代码中执行上述操作。

建议:使用 MediaStore Api 执行音频插入和检索操作(如 Android 官方建议的那样)。

【讨论】:

  • 文件数组变空了,我也获得了在我的清单文件中读取外部存储的权限,所以这不是问题,而且目录也不是空的,我也检查过跨度>
  • 我已经更新了代码,有时你需要使用不推荐使用的东西,因为android官方没有提供替代和合法的方式。
猜你喜欢
  • 2011-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-08
  • 2019-12-20
  • 2018-06-06
  • 1970-01-01
相关资源
最近更新 更多