Как получить список всех файлов по указанному c пути - PullRequest
2 голосов
/ 07 января 2020

Я пытаюсь добавить каждый файл из указанной папки c в список, используя kotlin, но код возвращает только путь / файл, который определен как путь в коде:

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
}

The xml part:

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

Например, этот код выше помещает только одну строку в просмотр списка /storage/emulated/0/

Ответы [ 5 ]

1 голос
/ 07 января 2020

Ваш код 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
            }
        }
    }
1 голос
/ 07 января 2020

Это не Kotlin, но в Java я сделал что-то вроде этого, что может помочь:

File[] existingFiles = new File(path).listFiles();
for (File F : existingFiles) {
  // do something with File, e.g. "F.getName()"
}
1 голос
/ 07 января 2020

должно работать. Держу пари, что у вас не настроены соответствующие разрешения. Убедитесь, что вы добавили Manifest.permission.READ_EXTERNAL_STORAGE в свой манифест или заставили пользователя принять разрешение READ_EXTERNAL_STORAGE через диалоговое окно разрешения.

0 голосов
/ 07 января 2020

Добавить этот код

 if (!file!!.exists()) {
            file!!.mkdir()
        }
0 голосов
/ 07 января 2020

Вот ваш код в Kotlin, чтобы получить список файлов по указанному c пути

val files = File("your_path").listFiles()
val fileNames = arrayOfNulls<String>(files.size)
files?.mapIndexed { index, item ->
    fileNames[index] = item?.name
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...