Pouze tento týden sleva až 80 % na e-learning týkající se Swift
Využij akce až 80 % zdarma při nákupu e-learningu. Více informací.

Diskuze: Praca s triedou File - hladanie v jej polozkach

Aktivity
Avatar
No Name
Člen
Avatar
No Name:18.2.2020 21:08

Mam povolene prava na READ_EXTERNAL_STO­RAGE, aby som mohol pracovat s datami na ulozisku. Na externej SD-karte mam vytvorenu vlastnu strukturu adresarov a suborov. Najskor potrebujem zistit, ci mam tuto SD-kartu k dispozicii. Riesim to tak, ze ci nacitam adresar /storage/ a jeho podadresare. Toto robim v MainActivity.kt tak, ze som si vytvoril premennu myxternalFile, pri debugovani vidim, ako sa mi do nej nacitali vsetky adresare a subory, ako som chcel.
Lenze neviem, ako mam riesit vyhladavanie v tomto zozname.Toto je kus kodu aj s definiciou:

    var myExternalFile = File("/storage/")
    var retazec : String = "nic"
    var found : Boolean = false


myExternalFile.listFiles().forEach {
    retazec = it.toString()
    if (retazec.contains("SongBook"))
      {
          found = true
      } else {
          found = false
      }
}

Lenze to prehliadne iba prvu uroven a nie tie dalsie.
Dost ma to myli, pretoze som si to predstavoval ako pole a ja sa teraz neviem pohybovat v nom za pomoci indexov, aby som tam hladal mena suborov ci priecinkov... Neviem najst ani najvyssi index, aby som vedel, kde pole konci. Vie mi niekto pomoct a nakopnut ma, kde robim chybu?

Chci docílit: Mojim cielom bolo v nacitanej stromovej strukture adresarov a suborov sa pohybovat pomocou indexov a na zaklade toho ziskavat cestu k tymto suborom a adresarom, s ktorymi budem neskor pracovat.

 
Odpovědět
18.2.2020 21:08
Avatar
Odpovídá na No Name
Milan Suchomel:19.2.2020 14:44

Ahoj,
co něco takovýho? Převede ti to stromovou strukturu souborů na list. List neobsahuje adresáře. Pokud je to má obsahovat, stačí pouze odstranit "else"

fun getFilesList(root: File): List<File> {
    val list = ArrayList<File>()

    if (!root.isDirectory || root.listFiles() == null) return list

    for (file in root.listFiles()!!) {
        if (file.isDirectory)
            list.addAll(getFilesList(file))
        else
            list.add(file)
    }
    return list
}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
19.2.2020 14:44
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
No Name
Člen
Avatar
Odpovídá na Milan Suchomel
No Name:19.2.2020 15:35

Vďaka, funguje to, ako som chcel. Dúfam, že už budem môcť ďalej pracovať s jednotlivými položkami, prevádzať ich na reťazce, v nich zasa vzhľadávať a pod.

Zatiaľ ešte nechápem, prečo musím vytvoriť ďalší zoznam "List" stromovej štruktúry, keď pri debuggovani ho vidim načítaný v pamäti ako "root". Ja som sa snažil ísť po položkách priamo v tej triede File (v tvojom príklade to je "root"). To musím ešte doštudovať, ešte raz vďaka za pomoc.

 
Nahoru Odpovědět
19.2.2020 15:35
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.