webentwicklung-frage-antwort-db.com.de

Wie sortiere ich Dateien aus einem Verzeichnis nach Datum in Java?

Ich habe eine Methode, die den Inhalt von Dateien in einem Verzeichnis liest. Aus funktionalen Gründen ist es jedoch erforderlich, mit der ältesten Datei (angegeben durch die zuletzt geänderte Eigenschaft) zu beginnen und mit der neuesten Datei zu enden.

So öffne und lese ich die Dateien:

        FilenameFilter filter = new FilenameFilter() {
        public boolean accept(File dir, String name) {
            return name.matches("access_log.*");
        }
    };

    File folder = new File("/home/myfiles");
    File[] listOfFiles = folder.listFiles(filter);

    for (int i = 0; i < listOfFiles.length; i++) {
        String sFileName = listOfFiles[i].getName();
        File accessLogFile = new File(aLog.getPath(), sFileName);
        long time=accessLogFile.lastModified();
        // do something with the file
    }

Hat jemand eine Lösung, wie ich meine Dateiliste schnell nach Datum sortieren kann?

18
Ralph

Bearbeiten: In Java8:  

Arrays.sort(files, (a, b) -> Long.compare(a.lastModified(), b.lastModified()));link

Ich habe einen interessanten Code gefunden, der dem, was Sie benötigen, sehr nahe kommt. Schauen Sie sich den Code an (Nur eine kurze Einführung in Comparator):

File f = new File("/home/myfiles");

File [] files = f.listFiles();

Arrays.sort( files, new Comparator()
{
    public int compare(Object o1, Object o2) {

        if (((File)o1).lastModified() > ((File)o2).lastModified()) {
            return -1;
        } else if (((File)o1).lastModified() < ((File)o2).lastModified()) {
            return +1;
        } else {
            return 0;
        }
    }

}); 

Sie können auch in diesem Beitrag nachsehen, wie der Kerl das Problem gelöst hat: Bester Weg, Dateien in Java aufzulisten, sortiert nach Änderungsdatum?

37
sfrj

Die beste Option ist die Verwendung eines Komparators. Es gibt eine ähnliche Frage und Antwort hier ... Wie kann ich Dateien in Java auflisten, sortiert nach Änderungsdatum?

3
Ben

Ich würde FileUtils in commons-io verwenden, um die Collection of Files zurückzuholen. Ich würde dann einen benutzerdefinierten Vergleicher anwenden. Es sollte ziemlich einfach sein.

0
javamonkey79