Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
MethodensetLastModified funktioniert nicht wie gewünscht
setLastModified ändert zuerst einmal wie gewünscht das Modifizierungsdatum des Ordners(im Quelltext "temp") ab. Das sehe ich auch so im Windows-Explorer (das Modifizierungsdatum steht dann auf März 2010)
[JAVA=1]
File temp = new File(zielPfad);
if (!temp.exists() || temp.lastModified() != alteDatei.lastModified() ) {
System.out.println(temp.lastModified()); // "0", weil Datei beim ersten Durchlauf nicht existiert
erzeugeOrdner(temp);
temp.setLastModified(alteDatei.lastModified()); // "true"
System.out.println(temp.lastModified()); // "1268120217000", wie gewünscht
}
[/code]
Wenn ich den Code nun ein weiteres Mal ausführe, sollte er (meines Verständnisses nach) die IF-Bedingung nicht durchlaufen, weil die Modifizierungsdaten von "temp" und "alteDatei" verschieden sind. Genau dies macht er aber...
Zeile 3 gibt dann die Zeit aus, in der ich den Code das erste Mal ausgeführt habe (Juli 2012).
Den Quelltext habe ich übrigens entsprechend angepasst und nicht relevante Teile weggelassen... mit "temp" wird nichts mehr gemacht
Könnt ihr das Problem nachvollziehen und mir bei der Lösung dieses helfen?
Liebe Grüße
RaideR
//Edit Das ganz komische ist... Wenn ich den Code ein weiteres Mal ausführe, dann durchläuft er die IF-Bedingung nicht (Sprich: Beim zweiten Durchlauf hat er das Modifikationsdatum korrekt und nachhaltig (!) gesetzt)
if (!temp.exists() || temp.lastModified() != alteDatei.lastModified() ) {
Zweiter Durchlauf:
- Datei existiert also true, negiert durch das "!" wird daraus = false
- "weil die Modifizierungsdaten von "temp" und "alteDatei" verschieden sind" (schreibst Du zumindest) --> temp.lastModified() != alteDatei.lastModified() = true
- false || true = true --> Also geht er in den if-Zweig
Sorry hatte gerade noch nen Dreher im Code drinne in Zeile 5... Hab ich inzwischen korrigiert!
Es ist mir klar, dass wenn er die IF-Bedingung im zweiten Durchgang durchläuft, dass die beiden Modifizierungsdaten dann verschieden voneinander sind...
Die Frage ist: Wieso sind diese verschieden? Beim ersten Durchlauf setze ich das Modifizierungsdatum in Zeile 5 auf das der alten Datei... Die sollten also identisch sein! Die Ausgabe in Zeile 6 bestätigt das geänderte Modifikationsdatum in Durchlauf 1!
Es ist mir klar, dass wenn er die IF-Bedingung im zweiten Durchgang durchläuft, dass die beiden Modifizierungsdaten dann verschieden voneinander sind...
Die Frage ist: Wieso sind diese verschieden? Beim ersten Durchlauf setze ich das Modifizierungsdatum in Zeile 5 auf das der alten Datei... Die sollten also identisch sein! Die Ausgabe in Zeile 6 bestätigt das geänderte Modifikationsdatum in Durchlauf 1!
Sorry, hätte ich auf selbst drauf kommen können. Ich habe versucht, den Fehler auf einem Windows 7 mit Java 7 nachzustellen. Ist mir nicht gelungen. Der Vergleich von lastModified zweier Files mit == ist also prinzipiell ok.
Die Ursachenforschung ist also leider etwas Stochern im Nebel. Habe leider nur Ansatzpunkte für's Suchen und keine fertige Lösung für Dich:
- Du sagst, es werde mit temp nichts weiter gemacht. Stimmt das auch für alteDatei? Könnten ja auch andere Prozesse dazwischenfunken.
- Liegt eine der Dateien evtl. auf einem Netzwerkmount (Windows-Freigabe, NFS etc.)? Möglicherweise geringste Zeitabweichungen der beiden Rechner oder prinzipiell Ungenauigkeiten bei lastModified über Netzwerkmounts.
- Vor der if-Abfrage mache mal folgendes:
Das wird entsprechend des Fehlerbildes natürlich unterschiedliche Werte ausspucken, aber vielleicht macht es beim Lesen der Werte bei Dir irgendwie "Klick", woher die Abweichungen kommen könnten.