Suche nach der jüngsten Datei.

Status
Nicht offen für weitere Antworten.

EAM

Mitglied
Hi,
wiedereinmal wende ich mich hoffnungsvoll an das Java-Forum.

Ich möchte eine Methode schreiben die ein Verzeichnis durchsucht und mir anschließend die jüngste Datei (also das Datum als GregorianCalendar) zurückgibt.

Soweit dachte ich eigentlich das es so funktionieren sollte:
Code:
public GregorianCalendar getNeuestes(File projekt)
     {
         long neuer = Long.MAX_VALUE;
         GregorianCalendar gc = new GregorianCalendar();
         File[] liste = projekt.listFiles();
         for(File fil:liste)
         {
             if(fil.isFile())
             {
                 if(fil.lastModified()<neuer)
                     neuer = fil.lastModified();
             }
             else if(fil.isDirectory())
             {
                 GregorianCalendar g = getNeuestes(fil);
                 if(g.getTimeInMillis()<neuer)
                     neuer = g.getTimeInMillis();
             }
         }
         gc.setTimeInMillis(neuer);
         return gc;
     }
 
S

SlaterB

Gast
es macht großen Sinn, auch eine Frage zu stellen,
(außer 'findet alle Probleme selber und bietet mir eine fertige Lösung')


Tipp: bei den rekursiven Aufrufen musst du nicht ständig zwischen long und Calendar wechseln,
arbeite in der ganzen Operation nur mit long,
das Endergebnis dann in einer separaten umhüllenden Operation gerne in Calendar umwandeln
 

EAM

Mitglied
Danke für den Tipp...

Naja was sollte ich den Fragen? Außer das es halt nicht stimmt weiß ich ja auch nicht mehr...
 
S

SlaterB

Gast
wie zeigt sich denn der Fehler?
was sind deine Testdaten, was kommt jeweils für ein lastModified()-Wert raus,
wie werden diese Werte verarbeitet,
was ist das erwartete und erhaltene Endergebnis, + Zwischenergebnis nach jedem Schritt (jede Datei)?

das sind die ganz simplen Schritte mit denen du das alles selber herausfinden kannst,
und lasse unbedingt die Rekursion weg, ignoriere Directories,
das sollte erstmal in EINEM Verzeichnis laufen
 

EAM

Mitglied
Tja das hab ich jetzt ja auch schon 1,5 Tage lang gemacht...

Also ich hab alle Änderungen anzeigen lassen... und das ergibt für mich keinen Sinn mal wird das "jüngste" Datum älter und mal jünger...
 
S

SlaterB

Gast
vielleicht ist die Reihenfolge der Liste, die listFiles(); zurückliefert, zufällig
von solchen Späßen solltest du dich aber nicht abhalten lassen,
fange übrigens mit einem Verzeichnis mit nur 2 Dateien an, die beiden Fälle wirst du überblicken können,

und dann gehts Schritt für Schritt los,
aus
Code:
if(fil.isFile()) 
{ 
   if(fil.lastModified()<neuer) 
        neuer = fil.lastModified(); 
}
wird
Code:
if(fil.isFile()) 
{ 
   System.out.println("file: "+name+ lastModified);
   System.out.println("altes neuestes war: "+neuer+ ist aktuelles File neuer? true/ false);

   if(fil.lastModified()<neuer) 
        neuer = fil.lastModified(); 

   System.out.println("neues neuestes ist nun: "+neuer);

}
usw usf

erstelle dir ein genaues Log, was das Programm macht

--------

wenn du Probleme mit diesem Logging hast, dann frage im Detail nach,
einfach nur '1,5 Tage lang gemacht + geht nicht' hilft nicht weiter

wenn dir das alles fremd ist und du nur die fertige Lösung willst,
dann entschuldige die Störung ;)
 

EAM

Mitglied
Mein Beispiel:
Ich übergebe einen Ordner mit 10 Unterordnern....
und für diese 10 Ordner bekomme ich zurück:

10.09.2003
27.10.2003
27.10.2003
27.10.2003
27.10.2003
18.12.2002
27.10.2003
27.10.2003
27.10.2003
27.10.2003

wenn ich aber im Explorer nachsehe, finde ich fast in jedem Ordner Dateien die jünger sind als diese Daten...
Oh hab deine Antwort erst jetzt bemerkt...
Danke für die Hilfe ich dachte nur vielleicht hab ich einen gröberen Gedankenfehler den jemand anders eventuell schneller findet...

Ansonsten muss ich noch herumbasteln...
 
S

SlaterB

Gast
wie gesagt: Unterordner interessieren im ersten Schritt nicht die Bohne,
versuche das Programm für ein Verzeichnis zum Laufen zu bringen,
idealerweise erstmal nur mit 2 Dateien drin, dann langsam besser werden
 

EAM

Mitglied
Ich habe jetzt ein detailierteres Problem:
Ich habe einen Ordner mit 4 dateien...
Das Programm erkennt die erste Datei als jünger (klar weil ja long.max-value).
So jede weitere Datei in diesem Ordner ist aber noch jünger...
trozdem passiert hier nichts mehr und er gibt mir das Datum der ersten Datei aus.

Meine Frage:

Bricht aus irgendeinem Grund die for-Schleife ab?
Ist meine Abfrage Schuld daran, dass die restlichen Dateien nicht als jünger erkannt werden?

mfg. EAM
 
S

SlaterB

Gast
ich persönlich weiß es nicht, bei mir läuft alles perfekt,
ich kann nicht absehen, was bei dir so los ist

Code:
public class Test2
{

    public static void main(String[] args)
    {
        File f = new File("data");
        long l = getNeuestes(f);
        System.out.println("\nEndergebnis:");
        System.out.println(l + ", " + new Date(l));

    }

    public static long getNeuestes(File projekt)
    {
        long neuer = Long.MAX_VALUE;
        String name = "--------";
        File[] liste = projekt.listFiles();
        for (File fil : liste)
        {
            if (fil.isFile())
            {
                long lastModified = fil.lastModified();
                System.out.println();
                System.out.println(neuer + ", " + new Date(neuer) + " = bisher neuestes File : " + name);
                System.out.println(lastModified + ", " + new Date(lastModified) + " = neu untersuchtes File: " +
                                   + fil.getName() + ", neuer?: " + (lastModified < neuer));

                if (lastModified < neuer)
                {
                    neuer = lastModified;
                    name = fil.getName();
                }
            }
        }
        return neuer;
    }
}

->

vollständiges Log, welches jede Einzelheit bis in den letzten Millimeter verrät


Code:
9223372036854775807, Sun Aug 17 08:12:55 CET 292278994 = bisher neuestes File : --------
1187689657955, Tue Aug 21 11:47:37 CEST 2007 = neu untersuchtes File: a.pdf, neuer?: true

1187689657955, Tue Aug 21 11:47:37 CEST 2007 = bisher neuestes File : a.pdf
1187686649959, Tue Aug 21 10:57:29 CEST 2007 = neu untersuchtes File: b.pdf, neuer?: true

1187686649959, Tue Aug 21 10:57:29 CEST 2007 = bisher neuestes File : b.pdf
1187686810430, Tue Aug 21 11:00:10 CEST 2007 = neu untersuchtes File: c.pdf, neuer?: false

1187686649959, Tue Aug 21 10:57:29 CEST 2007 = bisher neuestes File : b.pdf
1187687743776, Tue Aug 21 11:15:43 CEST 2007 = neu untersuchtes File: d.pdf, neuer?: false

Endergebnis:
1187686649959, Tue Aug 21 10:57:29 CEST 2007

das Programm sucht natürlich die ÄLTESTE Datei, das weißt du schon?
 

EAM

Mitglied
Aha... naja das hatte ich nicht beabsichtigt...
mal sehen last Modified liefert mir ja die millisekunden seit der letzen änderung...

d.h. wenn der wert größer ist, liegt ja die Änderung länger zurück oder?

Es kann natürlich sein das ich schon so kompliziert denke das ich das nicht check aber was müsste ich dann ändern damit es das jüngste sucht und nicht das älteste?

Aber danke für die Unterstützung!
 

EAM

Mitglied
d.h. ist müsste die long-Variable mit 0 initialisieren und dann das Zeichen umdrehen?

das Versteh ich zwar nicht aber ist das die Lösung?
 
S

SlaterB

Gast
du kennst die Antwort: ob das die Lösung ist wird dir dein Programm im Log verraten ;)

das scheint jedenfalls ein vielversprechender Ansatz zu sein, ja
 

EAM

Mitglied
Cool danke nochmal aber kannst du mir das erklären?

Weil die Long-Zahl ja größer sein muss wenn die Datei älter ist oder hab da was falsch verstanden?

mfg. EAM
 
S

SlaterB

Gast
hmm, nö, die Zahl long ist ein Datum/ eine Zeit in einer gewöhnungsbedürftigen Darstellung

0 ist 1.1.1970

1000 ist 1.1.1970 + 1 Sekunde

und 897498749334 ist dann irgendwann heute,
je größer Long, desto später in der Zeit,

die jüngste Datei nach deiner Interpretation ist die mit dem höchsten Zeitstempel
 

EAM

Mitglied
Oh aha ... also hab ich das von Grund auf falsch verstanden.... ja dann is mir klar das das nicht funktionieren konnte.... (dann tu ich mir mit dem log auch leichter) lol Danke schöne Ferien noch (sofern du noch Schüler bist)
 

NTB

Bekanntes Mitglied
aber wenn Du das Log schon nicht verstanden hast, dann hättest Du doch einen klareren Ansatzpunkt gehabt.
Mach das nächstes Mal genauso, wie SlaterB es Dir vorgeschlagen hat: JEDEN einzelnen Schritt entweder debuggen, oder eben per Log ausgeben.
Und eben auch nicht gleich das ganze Haus bauen, sondern vielleicht erstmal eine Wand.
 

m4uz

Mitglied
Hi SlaterB:

Erstmal Danke für den Link hier in den Thread.
Allerdings habe ich noch eine Frage.
Du hast in Deinem Code, wenn ich es richtig verstanden habe, den Ordner "Data" angegeben. Was aber nun, wenn ich nicht auf einem Ordner in meinem System, sondern auf meinem FTP-Server suchen möchte?


Ich versuchte es mit folgendem Funktionsaufruf:

File fileDir = new File("192.168.0.1/directory/");
String newestFile = getNewestFile(fileDir);

Allerdings erhalte ich immer eine NullPointerException, wenn die for-each - Schleife innerhalb der Funktion betreten werden soll. Daher gehe ich einfach mal davon aus, dass im Funktionsaufruf der Ordner auf dem FTP-Server nicht richtig übergeben wird.
Zu Testzwecken habe ich es auch mal mit einem lokalen Ordner versucht - da klappte alles.

Ich hoffe, ihr könnt mir helfen und bedanke mich im Voraus.
 
S

SlaterB

Gast
ich persönlich weiß nicht, wie du mit Files auf einem entferten FTP-Server umgehen kannst/ sollst/ darfst,
da wäre wahrscheinlich ein neues Topic passend
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
I HTML / XHTML Seite nach Excel exportieren. Suche Lib Allgemeine Java-Themen 12
B Suche nach einem Testprogramm für meine BA Allgemeine Java-Themen 0
L Suche nach CalDav Server API Allgemeine Java-Themen 0
A Java - Suche nach Datensatz mit DateChooser Allgemeine Java-Themen 0
E Suche nach Foto-Dummy Allgemeine Java-Themen 8
S Suche im JTree nach Neuaufbau Allgemeine Java-Themen 4
D Suche nach passender Datenstruktur Allgemeine Java-Themen 4
hdi Suche nach Begriff aus der Programmierung Allgemeine Java-Themen 11
Daniel_L Suche nach ganzen Wörtern (wholeword) in Strings? Allgemeine Java-Themen 4
G Regex-Suche nach Worten Allgemeine Java-Themen 3
P Problem: Suche nach einem Begriff Allgemeine Java-Themen 5
M Binäre Suche Allgemeine Java-Themen 6
M geometrische Suche Allgemeine Java-Themen 8
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
W Collections Suche Collection, um Strings mit Indizees versehen Allgemeine Java-Themen 47
O Suche Scripter für alt:V Project! Allgemeine Java-Themen 0
D Suche Quellcode! Allgemeine Java-Themen 8
O Suche Unterstützung für ein OpenSource-Projekt (grafischer Editor) Allgemeine Java-Themen 13
B Bei Email: FW / AW... - Hilfe bei String suche Allgemeine Java-Themen 21
J Suche Alternative zu Jasper Reports Allgemeine Java-Themen 4
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
M Suche Alternative zu JFreeChart Allgemeine Java-Themen 11
S Warmup für Lineare-Suche mit Zeitmessung Allgemeine Java-Themen 2
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
O Suche größeres Beispiel für WebserverAnwendung mit Java Allgemeine Java-Themen 2
G Google-Suche ist nicht auslesbar?! Allgemeine Java-Themen 18
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
HarleyDavidson Best Practice Suche "Container" für Modulapplikationen Allgemeine Java-Themen 0
S Suche Konzept: Korrektheit des Aufrufers feststellen Allgemeine Java-Themen 7
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
B Suche geeignete Datenstruktur Allgemeine Java-Themen 5
L Erste Schritte Suche Java Wiki System? Allgemeine Java-Themen 5
L Suche Geräte für Java SE Embedded Allgemeine Java-Themen 0
S Rekursive Suche in einem Netz Allgemeine Java-Themen 5
F Über Java Google Suche nutzen Allgemeine Java-Themen 11
A Suche Android Programmierer Allgemeine Java-Themen 0
W Suche Framework zur Prüfung von IPv4 und IPv6 Allgemeine Java-Themen 2
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
M Suche Framework/API für Monitoring-Anwendung Allgemeine Java-Themen 3
F Suche kostenlose GUI für Eclipse Allgemeine Java-Themen 10
H Suche mit Wildcards und boolschen Operatoren Allgemeine Java-Themen 4
B Suche passende Datenstruktur für 2 Einträge Allgemeine Java-Themen 19
A Binäre Suche im Array mit StackOverflowError Allgemeine Java-Themen 3
T Verkettete Suche Allgemeine Java-Themen 6
S RxTx - langsame Port suche Allgemeine Java-Themen 3
D Suche Matrix Libraries Allgemeine Java-Themen 11
S Suche Dependency Injection Container Allgemeine Java-Themen 6
J Suche: Tool zum Auffinden gleichnamiger Klassen (Name und Package gleich) in unteschiedlichen JARs Allgemeine Java-Themen 5
BinaryLogic Input/Output Suche Wörterbuch-Datei Einzahl/Mehrzahl Allgemeine Java-Themen 2
A Suche Algorithmus zum Erstellen eines planaren Graphen Allgemeine Java-Themen 5
D Suche Librarys ähnlich datatables.net + Login Allgemeine Java-Themen 3
Gossi Threads Suche ein (einfaches) Beispiel Allgemeine Java-Themen 5
P Erste Schritte Suche in ArrayList mit Maps Allgemeine Java-Themen 4
F Suche Performanceoptimierung bei Stringsortierung Allgemeine Java-Themen 51
B Suche Datenquelle für lizenz-informationen Allgemeine Java-Themen 5
J Lucene suche in Json (CouchDB) Allgemeine Java-Themen 2
X Suche Softwareimplementierung von Cryptographischen Algorithmen Allgemeine Java-Themen 3
S Suche Tipps für Einstieg in JavaCC Allgemeine Java-Themen 2
R Suche in logfiles mit Lucene / Solr Allgemeine Java-Themen 2
P Suche Datenstruktur Allgemeine Java-Themen 2
M Suche Java-Projekt zum Thema Elektrotechnik Allgemeine Java-Themen 6
F Suche Begriff Allgemeine Java-Themen 2
hdi Suche Icon-Sammlung Allgemeine Java-Themen 7
G Suche "richtiges" Framework/Library Allgemeine Java-Themen 14
slawaweis Suche Klassen für Event Managment und Time Allgemeine Java-Themen 2
P Probleme mit wikipedia quellcode zur binären Suche Allgemeine Java-Themen 6
C Suche Permutationsalgo Allgemeine Java-Themen 6
B Suche Paket zum auslesen von Metadaten von Bildern. Allgemeine Java-Themen 4
N suche globale Tastenabfrage Allgemeine Java-Themen 6
P SUCHE: gute Geo Library (freeware) Allgemeine Java-Themen 2
P Suche performante PDF Library Allgemeine Java-Themen 20
data89 Bilder mit Java prüfen - suche dringend Hilfe Allgemeine Java-Themen 8
faetzminator Regex zur Suche von "value-losen" Attributen in HTML Tags Allgemeine Java-Themen 7
W Problem bei der Suche (binarySearch) vom deutschen Sonderzeichen "ß" im einem Array Allgemeine Java-Themen 6
S suche library die diagramme darstellen kann Allgemeine Java-Themen 2
T Suche Anhaltspunkt für plattformübergreifende, "unique machine id" ... Allgemeine Java-Themen 12
P WebSerive Suche Allgemeine Java-Themen 15
X Suche Java Klasse die Feiertage berechnen kann Allgemeine Java-Themen 2
B suche Deutsche Übersetzung für neuste Eclipse Version Allgemeine Java-Themen 6
Antoras Suche Projektarbeit für Gruppe mit 3 Leuten Allgemeine Java-Themen 5
G Perfomante Suche in grosser Datei Allgemeine Java-Themen 6
T Suche Tool Allgemeine Java-Themen 11
D Suche sowas wie Map nur für mehrere Werte Allgemeine Java-Themen 13
D Suche Hilfe zum Rechnerübergreifenden Dateizugriff. Allgemeine Java-Themen 3
M suche speziellen Sortieralgorithmus Allgemeine Java-Themen 3
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
T Suche den großen Calendar Thread ! Allgemeine Java-Themen 2
P Suche Benis IP/Netzwerkadresse JTExtField Allgemeine Java-Themen 2
J Suche Doku um generischen Code zu erstellen. Allgemeine Java-Themen 9
G suche Property alternative Allgemeine Java-Themen 4
C Fehler im Quellcode. Suche in einem Baum Allgemeine Java-Themen 3
S Suche Pendant zu einem VB Befehl Allgemeine Java-Themen 2
T Suche gute JAVA Steuerelemente Allgemeine Java-Themen 2
V Suche RegEx zu (gelöstem) Problem Allgemeine Java-Themen 3
B Suche Browser-Control Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben