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.
Ich habe beispielsweise folgendes Verzeichnis:
Ordner a -> "bild1.png"
Ordner a -> Ordner b -> Ordner c -> "bild2.png"
Ich bekomme ja bei einem File die Methode listFiles, welche sämtliche Unterverzeichnisse eines Files auslesen kann.
Im Beispiel würde nun a.listFiles ein Array mit dem File zu bild1.png beinhalten und einen File zu Ordner b. Doch ich brauche ein Array (oder ArrayList) die einen File zu bild1.png und bild2.png beinhaltet. Hab da eigentlich folgenden kleinen Algorithmus gebastelt, aber irgendwie scheint der nicht zu funktionieren. Vielleicht kann da mal kurz jemand drüber schauen ob er einen Fehler findet. Oder bietet die Klasse file sogar eine passende Methode, sodass ich mir den Algorithmus sparen könnte?
Es gibt diverse Libraries, die die Auflistung von Dateien rekursiv liefern können. Mit io.File ist es imo nicht möglich, aber jedoch mit listFiles der richtige Ansatz. Falls du es selbst machen willst:
Deine getXXX suggerieren, dass etwas zurückgegeben wird. (Hab eine public Methode, die etwas liefert und private Methoden, die die Arbeit verborgen durchführen)
Ändere deine Rekursion, dass sie mit File statt einem collectionwertigen Parameter (File[]) arbeitet. Das wird es dir vereinfachen.
Ein kurzer Test (durch Erstellen einer Klasse, Aufruf-Code und Ersetzung von Mod durch ein File) auf einen Ordner hat ergeben, dass alle Dateien rekursiv in die Liste uploadFiles gepackt werden. Ist das nicht was du wolltest? Was erwartest du sonst in der Liste? Funktioniert ein Spezialfall nicht?
Hab das ganze jetzt noch ein bisschen abgeändert. Problem ist gewesen, dass die Files die Java mir geliefert hat mit "\\" die Directories von einander abtrennt. Das System brauchte allerdings den normalen Slash, warum auch immer - aber es scheint nun doch zu funktionieren.
Ich hätte allerdings noch eine weitere Frage: die Methode file.lastModified(); liefert einen long wert, wann der File zuletzt geändert worden ist. Nun habe ich mal die Files mit dieser Methode aufgerufen alle und diese long Werte in eine csv Datei schreiben lassen. Nun möchte ich abgleichen ob einer dieser files aktualisiert worden ist.
Das erneute Abfragen der Files nach dem lastModified sieht bei mir so aus:
Ich dachte es geht darum welche Dateien in der Ergebnisliste liegen. Jetzt schreibst du etwas vom Dateiseperator in Pfaden. Und welches System?
Ich denke eine Änderung am betrachteten Ordner inkl. allen enthalten Dateien darf nicht nur Dateien verändern sondern auch Löschen. Die Löschung macht jedoch deine Reihenfolge in der Liste kaputt. Statt eine Liste würde ich ein Mapping Absoluter Dateiname -> Änderungstimestamp anlegen.
Schwer zu sagen ohne die konkreten Timestamps deines Dateisystems. Außerdem blick ich nicht durch was mods sind und wo sie herkommen und was getChange und getChangeModFile liefert und wo der Unterschied ist.Außerdem ist nicht klar wann was von wem aufgerufen wird. Schreib doch ein paar Unit-Tests, um das Verhalten deines Codes zu kontrollieren.