2012-04-05 2 views
3

So habe ich eine ListView, die die Namen aller Dateien in einem bestimmten Verzeichnis anzeigt. Diese Anwendung löscht auch Dateien und fügt neue Dateien zum Verzeichnis hinzu.Ich verstehe nicht die Reihenfolge der Datei-Array zurückgegeben von listFiles()

Ich möchte, dass die Dateien in der Reihenfolge ihrer Erstellung angezeigt werden, aber dies gilt nicht immer für Datei (Verzeichnis) .listFiles(). Wenn ich mit einem leeren Verzeichnis beginne und beginne, Dateien hinzuzufügen, dann geht die neueste Datei an Position 0 des Arrays und steigt auf, um zum ältesten zu gelangen. Wenn ich jedoch irgendwelche Dateien lösche und dann neue hinzufüge, werden die Dinge merkwürdig. Hier ein Beispiel ...

Stellen Sie sich vor, ich habe mit einem leeren Verzeichnis begonnen und vier Dateien hinzugefügt. Das Array von Listfiles() zurückgegeben wird:

Position 0 = Datei # 4 (vierte hinzugefügt werden)
P 1 = Datei # 3
P 2 = Datei # 2
P 3 = Datei # 1

Dann lösche ich die Dateien # 2 und # 3. Das Array ist:

P 0 = Datei # 4
P 1 = Datei # 1

So weit, so gut. Jetzt füge ich zwei neue Dateien hinzu. Ich würde das neue Array von Listfiles() zurückgegeben erwarten zu sein:

P 0 = Datei # 6
P 1 = Datei # 5
P 2 = Datei # 4
P 3 = Datei # 1

Allerdings ist hier, was es eigentlich ist:

P 0 = Datei # 4
P 1 = Datei # 6
P 2 = Datei # 5
P 3 = Datei # 1

Aber wenn ich dann eine Datei # 7, das neue Array wird hinzufügen:

P 0 = Datei # 7
P 1 = Datei # 4
P 2 = Datei # 6
P 3 = Datei # 5
P 4 = Datei # 1

Grundsätzlich, wenn alle Dateien gelöscht werden, dann neue Dateien werden ihre "alte Positionen" im Array füllen. Alle "alten Positionen" müssen ausgefüllt werden, bevor neue Dateien auf Position 0 gesetzt werden. Kann jemand dieses Verhalten erklären? Gibt es auch eine schnelle und einfache Möglichkeit, das Datei-Array in meine gewünschte chronologische Reihenfolge umzuordnen?

Antwort

7

Holen Sie sich die Liste der Dateien zu verwenden ist File.listFiles() und die Dokumentation besagt, dass dies keine Garantien über die Reihenfolge der Dateien gibt zurückgegeben. Daher müssen Sie eine Comparator schreiben, die File.lastModified() verwendet und diese zusammen mit dem Array von Dateien an Arrays.sort() übergeben.

Code:

File[] files = directory.listFiles(); 

Arrays.sort(files, new Comparator<File>(){ 
    public int compare(File f1, File f2) 
    { 
     return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified()); 
    } }); 

Versuchen Sie dies und lassen Sie mich wissen, was passieren ..

EDIT:

Sie könnten auch an apache commons IO aussehen, es in last modified comparator ein gebaut und viele andere nützliche Dienstprogramme für die Arbeit mit Dateien.

+0

Wow, vielen Dank! Siehe meine Antwort unten ... – osweetman

+0

@osweetman - Sie können diese Antwort akzeptieren. Wenn es Ihr Problem gelöst hat .. Dies ist nützlich für Sie und andere Benutzer auch .. – user370305

+0

Ich konnte mein Problem mit dem folgenden Code beheben: files = neue Datei (Verzeichnis) .listFiles(); Arrays.sort (Dateien); Da alle meine Dateien mit ihrem Datum/Zeitpunkt der Erstellung benannt sind, scheint es, dass ich nicht einmal Comparator oder File.lastModified() verwenden muss. Nun, das ist schnell und einfach! – osweetman

Verwandte Themen