Ordner nach Dateien durchiterieren
-
Hi,
wie kann ich einen Ordner nach Dateien (auch die Dateien in Unterordnern !) durchiterieren ?
Als Ergebnis der Iteration hätte ich mir z.B. eine ArrayList/LinkedList von Strings gedacht, wobei ein String jeweils den kompletten/relativen Pfad einer gefundenen Datei beinhaltet.Wenn Java sowas nicht standardmässig unterstützt:
Welche Helferlein (Klassen) bringen mich definitiv weiter ?Vielen Dank schonmal !
-
Als Ergebnis der Iteration hätte ich mir z.B. eine ArrayList/LinkedList von Strings gedacht
Am besten selber schreiben...
Welche Helferlein (Klassen) bringen mich definitiv weiter ?
java.io.File... und da die Methode listFiles()
-
Super, genau das habe ich gesucht.
Danke !
-
Falls es jmd. interessiert - ich habe es jetzt so implementiert (es war garnicht so schwierig, wie ich dachte):
import java.io.*; import java.util.*; class ListFiles2{ ArrayList paths = new ArrayList(); public void getFiles(File searchPath){ File[] tmp = searchPath.listFiles(); for(int i=0; i<tmp.length; ++i){ if(tmp[i].isDirectory()) getFiles(tmp[i]); if(tmp[i].isFile()) paths.add(tmp[i]); } } public void printPaths(){ for(int i=0; i<paths.size(); ++i){ System.out.println(((File)paths.get(i)).getAbsolutePath()); } } } Zum Testen: import java.io.*; class TestListFiles{ public static void main(String[] args) throws Exception{ ListFiles2 lf = new ListFiles2(); lf.getFiles(new File("C:\\Programme")); lf.printPaths(); } }
Danke nochmal an destructOr.
-
Um die Performance zu verbessern solltest du eine LinkedList anstelle der ArrayList verwenden, weil du ja eine Liste brauchst, in der die Einfüge-Operationen sehr schnell sind. (Bei einer ArayList kann das u.U. sehr lange dauern)
Um Listen (Collections) zu durchlaufen verwendet man besser einen Iterator (weil das bei der LinkedList ebenfalls schneller ist als über get(int)):[java] public void printPaths(){
Iterator it = paths.iterator();
while (it.hasNext()) {
System.out.println(((File)it.next()).getAbsolutePath());
}
}[/code] Bei einer LinkedList ist das sicherlich um Längen schneller. (Bei einer ArrayList wird der Unterschied nur sehr gering sein)