如何获取特定路径下的所有文件列表

3
我正在尝试使用Kotlin将特定文件夹内的所有文件添加到ListView中,但代码只返回在代码中定义为路径的路径/文件。
val letovi: MutableList<String> = ArrayList()
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    File("/storage/emulated/0/").walkBottomUp().forEach {
      letovi.add(it.toString())
    }
      val arrayAdapter = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,letovi)
      flightList.adapter = arrayAdapter
}

XML 部分:

 <ListView
        android:id="@+id/flightList"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

例如,上面的代码只将一行放入列表视图 /storage/emulated/0/

这个回答解决了您的问题吗?从android/emulated/0/Download获取文件列表 - Md. Asaduzzaman
5个回答

2
这是您的Kotlin代码,用于获取特定路径下的文件列表:
val files = File("your_path").listFiles()
val fileNames = arrayOfNulls<String>(files.size)
files?.mapIndexed { index, item ->
    fileNames[index] = item?.name
}

2

你的代码是true。你需要在运行时请求读取外部存储权限

 fun isReadStoragePermissionGranted(): Boolean {
    return if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
            true
        } else {
            ActivityCompat.requestPermissions(this, arrayOf(READ_EXTERNAL_STORAGE), 1)
            false
        }
    } else { //permission is automatically granted on sdk<23 upon installation
        true
    }
}

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if(requestCode == 1){
            if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
                // some code
            }
            else{
                // some code
            }
        }
    }

这一点非常重要,特别是如果您正在尝试列出目录或文件以进行删除或操作。在我的情况下,为了能够删除文件,我将其更改为WRITE_EXTERNAL_STORAGE。谢谢! - KBog

1

应该可以工作。我打赌你没有相应的权限设置。确保在你的清单中添加Manifest.permission.READ_EXTERNAL_STORAGE,或通过权限对话框强制用户接受READ_EXTERNAL_STORAGE权限。


我早就做过了,我有互联网、读取和写入外部存储的权限。 - stacks
嗯,让我测试一下你的代码,如果我找到了罪魁祸首,我会改进我的答案。 - M'aiq the Coder

1

虽然不是Kotlin,但我在Java中做过类似的事情,可能会有所帮助:

File[] existingFiles = new File(path).listFiles();
for (File F : existingFiles) {
  // do something with File, e.g. "F.getName()"
}

0

添加这段代码

 if (!file!!.exists()) {
            file!!.mkdir()
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接