2013-08-26 8 views
5

Ich muss alle absoluten Pfade von Dateinamen in einem bestimmten Verzeichnis im Speicher halten.Alle absoluten Pfade der Dateien in einem bestimmten Ordner erhalten

myDirectory.list() - Ruft String [] nur von Dateinamen ab (ohne ihre absoluten Pfade).

Ich möchte das Dateiobjekt nicht verwenden, da es mehr Speicher belegt.

Letzte Sache - ich kann Apache Sammlungen usw. verwenden (aber nichts nützliches dafür gefunden).

Antwort

0

Nicht myDirectory enthält das Verzeichnis aller dieser Dateien? Wenn ja, kombinieren Sie einfach den Pfad in myDirectory mit jeder der Zellen im Array myDirectory.list() zurück.

+0

Danke. Sie meinen - machen Sie eine andere Iteration auf MyDirectory.list() und kombinieren Sie sie mit einem neuen String []? Gibt es etwas Besseres aus der Box? – user1025852

+0

Welcher Typ ist myDirectory? –

+0

Dateiobjekt ..... – user1025852

8
String directory = <your_directory>; 
File[] files = new File(directory).listFiles(); 
for(File file : files){ 
    if(file.isFile()){ 
    System.out.println(file.getAbsolutePath()); 
    } 
} 

Dies funktioniert, und ich muss sagen, ich bin verwirrt, wenn Sie sagen, Sie wollen nicht, dass Sie es mit Datei-Objekte, aber was auch immer funktioniert, ich denke.

+0

Danke schätze es. Das Verwenden des File-Objekts ist viel teurer als das Halten der Pfadangabe. Fall Ich werde Ordner mit 100K-Dateien behandeln Ich habe Angst vor zu wenig Speicher usw. Also - ich suche nach einer ordentlichen Lösung, um String [] aller absoluten Dateipfade in einem Ordner – user1025852

+0

zu erhalten, wenn Sie den Root-Pfad bereits kennen und relative Pfade Ihrer Dateien, und Sie sind nicht bereit, eine weitere Iteration zum Verketten dieser Strings durchzuführen, und Sie sind auch nicht bereit, Dateiobjekte zu verwenden, weil Sie nicht genügend Arbeitsspeicher haben. Sie sollten Ihr Array wahrscheinlich in kleinere Arrays aufteilen und sie getrennt verarbeiten, indem sie die bereitgestellten Schritte befolgen. – victorantunes

+0

danke, schätze es – user1025852