1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Alle Dateien eines Ordners in ein Array schreiben

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Hans-Peter, 05.11.2010.

  1. Hans-Peter, 05.11.2010 #1
    Hans-Peter

    Hans-Peter Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    90
    Erhaltene Danke:
    9
    Registriert seit:
    05.11.2010
    Hallo zusammen,

    Ich möchte die Dateinamen aller Dateien, die in einem Ordner (Der Name des Ordners ist in einem String gespeichert) auf der SD-Karte gespeichert sind in ein Array einlesen.
    Das müsste eigentlich funktionieren, denn die Dateimanager machen es ja bestimmt ähnlich! :D


    Der Sinn ist, dass der User dem Programm sehr viele Dateien übergeben muss. Dass er nicht bei allen einzeln den Speicherort eingeben muss dachte ich, er muss sie alle in einen Ordner stecken und das Programm findet sie dann automatisch.


    Es müsste doch bestimmt eine Funktion geben wie directory.getFiles() oder so... (geht übrigens nicht)

    Würde mich über gute Antworten sehr freuen!
    Danke vorweg,

    Hans-Peter
     
  2. Fr4gg0r, 05.11.2010 #2
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    File deinRootDir = new File("/sdcard/");
    ArrayList<String> files = new ArrayList<String>();
    deinRootDir.listFiles(new FileFilter(){
    public boolean accept(File f){
    files.add(f.getAbsolutePath());
    return false;
    }}


    Ansonsten kannste auch einfach deinRootDir.listFiles(); verwenden, dann bekommste aber eine Liste mit File Objekten zurück..
     
  3. Hans-Peter, 05.11.2010 #3
    Hans-Peter

    Hans-Peter Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    90
    Erhaltene Danke:
    9
    Registriert seit:
    05.11.2010
    Danke für die Hilfe aber ich habs grad mal ausprobiert, eclipse hat Probleme mit files.add, er unterkringelt beide Wörter. Und er unterkringelt die letzte schließende Klammer.

    Kann man das noch irgendwie ändern, dass es klappt, ich versteh die fehlermeldung nicht...

    Danke für die Mühe
    Hans-Peter
     
    Zuletzt bearbeitet: 05.11.2010
  4. funcoder, 07.11.2010 #4
    funcoder

    funcoder Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    Hast du auch das "File-Package" importiert?
    Also folgendes oben in deiner JAva File hinzugefügt?
    import java.io.File;

    Wenn ja, was genau bekommst du für einen Fehler in Eclipse wenn du mit den Mauszeiger über das unterkringelte drüber gehst?
     
  5. Hans-Peter, 07.11.2010 #5
    Hans-Peter

    Hans-Peter Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    90
    Erhaltene Danke:
    9
    Registriert seit:
    05.11.2010
    File deinRootDir = new File("/sdcard/");
    ArrayList<String> files = new ArrayList<String>
    ();
    deinRootDir.listFiles(new FileFilter(){
    public boolean accept(File f){
    files.add(f.getAbsolutePath();
    return false;
    }} );

    Hat geklappt.

    Ich bekomme nur das array nicht ausgelesen...
    String test = files.get(0);
    geht nicht, es stürzt immer ab...
     
  6. Fr4gg0r, 07.11.2010 #6
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Ja guck in den Log.. (show view, other, logcat)

    Wenn das nicht klappt, ist deine Liste wohl leer :p
     
  7. Hans-Peter, 07.11.2010 #7
    Hans-Peter

    Hans-Peter Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    90
    Erhaltene Danke:
    9
    Registriert seit:
    05.11.2010
    Liste leer?
    Auf der sd-Karte??

    Ich schau morgen mal im log.
    Schon in eclipse, oder?
     
  8. Fr4gg0r, 07.11.2010 #8
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    ja
     
  9. funcoder, 08.11.2010 #9
    funcoder

    funcoder Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    Du solltest vielleicht mal deine arraylist mit einem Iterator durchlaufen. Damit beugst du eine exception vor falls keine Datei vorhanden ist. Habe deinen Zugriff via der get Methode eh noch nie gesehen oder verwendet. ?
     
  10. Hans-Peter, 10.11.2010 #10
    Hans-Peter

    Hans-Peter Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    90
    Erhaltene Danke:
    9
    Registriert seit:
    05.11.2010
    Da steht nichts sinnvolles drin...
    icon=4 oder so...


    Mit welcher Methode machst du es?


    Danke für eure Hilfe
     
    Zuletzt bearbeitet: 10.11.2010
  11. funcoder, 10.11.2010 #11
    funcoder

    funcoder Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    Mit einem Iterator :)

    Iterator itr = files.iterator();
    while(itr.hasNext())
    System.out.println(itr.next());
    }

    Der Iterator durchläuft deine Arraylist solange bis keine weiteren Einträge vorhanden sind...

    System.out.println musst du natürlich noch ersetzen...
     
    Hans-Peter bedankt sich.
  12. Hans-Peter, 11.11.2010 #12
    Hans-Peter

    Hans-Peter Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    90
    Erhaltene Danke:
    9
    Registriert seit:
    05.11.2010
    Code:
    itr.hasNext()
    ist immer false...


    Code:
    Iterator itr = files.iterator();
    [LEFT]while(itr.hasNext()){
    Toast.makeText(this, (CharSequence) itr.next(), Toast.LENGTH_LONG).show();[/LEFT]
    }
    gibt also keine Meldung zurück! ​





    Code:
    [SIZE=2]File Dir = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] File([SIZE=2][COLOR=#2a00ff][SIZE=2][COLOR=#2a00ff]"/sdcard/"[/COLOR][/SIZE][/COLOR][/SIZE]);[/SIZE]
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]final[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ArrayList<string> files = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] ArrayList<string>();[/SIZE][/LEFT]
    [SIZE=2]Dir.listFiles([/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] FileFilter(){[/SIZE]
     
    [LEFT][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]public [/COLOR][/SIZE][/COLOR][/SIZE][/B][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]boolean[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] accept(File f) {[/SIZE]
    
    [SIZE=2]Object Path = f.getAbsolutePath();[/SIZE]
    [LEFT][SIZE=2]files.add((string) Path);[/SIZE]
    [B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]return [/COLOR][/SIZE][/COLOR][/SIZE][/B][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]false[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2];[/SIZE][SIZE=2]}[/SIZE][SIZE=2]});[/SIZE][/LEFT]
    [/LEFT]
    
    

    Stimmt der Code dann auch??​
     
    Zuletzt bearbeitet: 11.11.2010
  13. Fr4gg0r, 11.11.2010 #13
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Erstens muss das "String" und nicht string heißen.
    Ansonsten sieht das richtig aus, auch wenn es nicht sinnvoll ist das Ergebnis von f.getAbsolutePath() (ein String) in ein Object zu packen und dieses dann wieder in einen String zu casten..
     
  14. Hans-Peter, 11.11.2010 #14
    Hans-Peter

    Hans-Peter Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    90
    Erhaltene Danke:
    9
    Registriert seit:
    05.11.2010
    Ich hab jetzt:


    Bundle bundle =
    this.getIntent().getExtras();

    String srcFolder=bundle.getString("src");




    File Dir = new File(srcFolder);
    final ArrayList<String> files = new ArrayList<String>();



    Dir.listFiles(new FileFilter(){
    publicboolean accept(File f) {
    files.add((String) f.getAbsolutePath());
    returnfalse;
    }
    });




    Iterator itr = files.iterator();
    while(itr.hasNext()){
    Toast.makeText(this, (CharSequence) itr.next(), Toast.LENGTH_LONG).show();
    }




    geschrieben! auch das geht nicht...
     
  15. Fr4gg0r, 11.11.2010 #15
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Teste es doch mal mit srcFolder = "/sdcard/";
    Dann wirst du sehen wo der Fehler liegt. ;)
     
  16. Hans-Peter, 11.11.2010 #16
    Hans-Peter

    Hans-Peter Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    90
    Erhaltene Danke:
    9
    Registriert seit:
    05.11.2010
    passiert auch nichts...
     
  17. funcoder, 11.11.2010 #17
    funcoder

    funcoder Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    Was bekommst du für einen Fehler in der logcat Ausgabe?
    Bzw. hast du mal testweise was er bei:
    f.getAbsolutePath()
    zurückbekommt in die Logausgabe geschrieben?
    Versuch mal den Fehler weiter einzugrenzen...
     
  18. Hans-Peter, 12.11.2010 #18
    Hans-Peter

    Hans-Peter Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    90
    Erhaltene Danke:
    9
    Registriert seit:
    05.11.2010
    if(files.isEmpty()){
    Toast.makeText(this, "EMPTY" , Toast.LENGTH_LONG).show();
    }

    ...habe ich nach dem Einlesen der Dateien geschrieben...
    Er zeigt empty...

    Stimmt dann die Methode zum einlesen nicht??
     
  19. Hans-Peter, 16.11.2010 #19
    Hans-Peter

    Hans-Peter Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    90
    Erhaltene Danke:
    9
    Registriert seit:
    05.11.2010
    srcFolder= "/sdcard/";


    File Dir = new File(srcFolder);
    final ArrayList<String> files = new ArrayList<String>();​


    Dir.listFiles(new FileFilter(){
    public boolean accept(File f) {
    files.add((String) f.getAbsolutePath());
    Log.v("File", f.getAbsolutePath());
    return false;
    }});​


    Er schreibt nichts ins Logcat...​
     
  20. Fr4gg0r, 16.11.2010 #20
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Vielleicht keine Sd Karte eingelegt? :laugh:
     
    Hans-Peter bedankt sich.

Diese Seite empfehlen