Listen Sie alle Dateien aus allen Ordnern in einer einzigen Liste auf
Lesezeit: 3 Minuten
Kanika
Ich suche nach der Lösung, um alle Dateien vom Root-/Android-Gerät aufzulisten.
Angenommen, es gibt drei Ordner im Stammverzeichnis, aber ich möchte alle Dateien in all diesen Ordnern in einer einzigen Liste anzeigen …
Wenn ich jetzt benutze
File f = new File("/sdcard");
Dann werden alle Dateien aus dem aufgelistet SD-Karte Ordner nur … Und wenn ich verwenden werde
File f = new File("/download");
Dann werden nur alle Dateien aus dem Download-Ordner aufgelistet … und wenn ich sie verwenden werde
File f = new File("/");
Dann werden nur die aufgelistet Wurzel Verzeichnisdateien … nicht die darin enthaltenen Dateien /SD-Karte oder /herunterladen.
Welche Schritte soll ich also befolgen, um alle Dateien mit einem Filter aufzulisten, um nur .csv-Dateien aus allen darin enthaltenen Ordnern aufzulisten? Wurzel?
private List<File> getListFiles2(File parentDir) {
List<File> inFiles = new ArrayList<>();
Queue<File> files = new LinkedList<>();
files.addAll(Arrays.asList(parentDir.listFiles()));
while (!files.isEmpty()) {
File file = files.remove();
if (file.isDirectory()) {
files.addAll(Arrays.asList(file.listFiles()));
} else if (file.getName().endsWith(".csv")) {
inFiles.add(file);
}
}
return inFiles;
}
Hallo Vyacheslav Shilkin, Ihr Code hat bei mir funktioniert, aber die Ausgabe erfolgt nach einer Verzögerung von einigen Sekunden (2-3 Sekunden). Können Sie etwas vorschlagen, um es etwas schneller zu machen?
– abhishek kumar gupta
24. Mai 2013 um 7:31 Uhr
Tolle Antwort, +1 für das Posten einer Lösung, die keine Rekursion verwendet.
– der-Ingwer-Geek
7. August 2017 um 5:15 Uhr
Welche Eigenschaften haben sie? Möglicherweise extremer Speicherdruck in einem der beiden? Was ist mit der Leistung? Integrieren Sie beispielsweise einige Benchmarks (inkl. Informationen zur Plattform (Hardware, Android-Versionen etc.), SD-Kartentyp/Leistungsklasse).
– Peter Mortensen
29. Dezember 2022 um 21:47 Uhr
Micer
Ich habe Vyacheslavs Lösung modifiziert, weil ich nur Dateinamen innerhalb des Verzeichnisses brauchte.
Tut mir leid, aber Ihre Änderungen sind keine Verbesserungen. Zuerst fügen Sie Verzeichnisse mit .txt-Beispiel hinzu und ich weiß wirklich nicht, was pathToParentDir sein soll, das parentDir.getParent() nicht reparieren kann. Schließlich wird von der Verwendung von “/” abgeraten, verwenden Sie stattdessen File.separator.
– Michel
19. April 2014 um 6:17 Uhr
Luzifer
Sie können die folgende Methode verwenden,
private int readLogList(String filePath)
{
File directory = Environment.getExternalStorageDirectory();
File folder = new File(directory + ConstantCodes.FILE_SEPARATOR + filePath);
if (!folder.exists())
{
return 0;
}
return folder.list().length;
}
Aber hier muss ich noch filePath übergeben? Kann ich nicht auf alle Dateien aus allen Verzeichnissen zugreifen?
– Kanik
2. März 2012 um 9:44 Uhr
dann müssen Sie diese Methode rekursiv aufrufen
– Luzifer
2. März 2012 um 9:46 Uhr
14390200cookie-checkListen Sie alle Dateien aus allen Ordnern in einer einzigen Liste aufyes