Alle Dateien eines Ordners in ein Array schreiben

H

Hans-Peter

Ambitioniertes Mitglied
10
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
 
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..
 
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:
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?
 
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...
 
Ja guck in den Log.. (show view, other, logcat)

Wenn das nicht klappt, ist deine Liste wohl leer :p
 
Liste leer?
Auf der sd-Karte??

Ich schau morgen mal im log.
Schon in eclipse, oder?
 
ja
 
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. ?
 
Fr4gg0r schrieb:
Ja guck in den Log.. (show view, other, logcat)

Wenn das nicht klappt, ist deine Liste wohl leer :p
Da steht nichts sinnvolles drin...
icon=4 oder so...


funcoder schrieb:
Habe deinen Zugriff via der get Methode eh noch nie gesehen oder verwendet. ?
Mit welcher Methode machst du es?


Danke für eure Hilfe
 
Zuletzt bearbeitet:
Mit welcher Methode machst du es?
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...
 
  • Danke
Reaktionen: Hans-Peter
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:
Hans-Peter schrieb:
Code:
[SIZE=2]File Dir = [/SIZE][B][SIZE=2][COLOR=#7f0055][SIZE=2][COLOR=#7f0055]new[/COLOR][/SIZE][/COLOR][/SIZE][/B][SIZE=2] File(srcFolder);[/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]
[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]
[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??

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..
 
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...
 
Teste es doch mal mit srcFolder = "/sdcard/";
Dann wirst du sehen wo der Fehler liegt. ;)
 
Fr4gg0r schrieb:
Teste es doch mal mit srcFolder = "/sdcard/";
Dann wirst du sehen wo der Fehler liegt. ;)

passiert auch nichts...
 
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...
 
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??
 
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...​
 
Vielleicht keine Sd Karte eingelegt? :laugh:
 
  • Danke
Reaktionen: Hans-Peter

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
105
swa00
swa00
R
Antworten
6
Aufrufe
992
swa00
swa00
B
Antworten
4
Aufrufe
466
bb321
B
Zurück
Oben Unten