Methoden Dateien älter als 30 Tage?

lam_tr

Top Contributor
Hallo zusammen,

gibt es einen Weg, Dateien die nicht älter als 30 Tage zu bekommen?

Momentan ist es so dass ich über das Netzlaufwerk Verzeichnisse hole. Leider sind da mehrere 10.000 Dateien in viele Verzeichnissen. Um nur die aktuellen Dateien zu holen, möchte ich die Dateiliste filtern.

1. Frage: Gibt es einen Weg performanter vorzugehen. Alle Dateien im Filer durchiterieren und rekursiv ist nicht so sinnvoll oder?

2. Frage: Wie bekomme ich nur die aktuellen Dateien von max 30 tage?
Code:
    if ( !FileUtils.isFileOlder(file, DateTime.now().minusDays(30).toDate()) ) {
       files.add(file);
    }

Hiermit geht das nicht.

Viele Grüße
lam
 

Joose

Top Contributor
1. Frage: Gibt es einen Weg performanter vorzugehen. Alle Dateien im Filer durchiterieren und rekursiv ist nicht so sinnvoll oder?
Mir würde spontan auch keine andere Lösung einfallen. Auch eine Framework Methode würde es nicht anders machen, nur vielleicht performanter.

2. Frage: Wie bekomme ich nur die aktuellen Dateien von max 30 tage?
Hast du dir oben schon selber beantwortet. Über alles iterieren und prüfen.

Code:
    if ( !FileUtils.isFileOlder(file, DateTime.now().minusDays(30).toDate()) ) {
Tipp 1: Anstatt für jede Datei die Datumsgrenze extra zu berechnen würde ich dies 1x am Anfang machen.
Tipp 2: File bietet die Methode "lastModified" an. Diese liefert dir einen long zurück, welcher der letzten Bearbeitungszeit entspricht. Hier mit long zu rechnen und zu vergleichen ist auch schon performanter.
 

lam_tr

Top Contributor
Vielen Dank für die schnelle Antwort. das mit dem lastmodified habe ich schon in einigen Tutorials schon gesehen, aber irgendwie hatte es auch nicht wirklich bei mir funktioniert. Das erschwert sogar das debuggen.

Also den folgenden Code habe ich schon getestet.

Code:
long diff =newDate().getTime()- file.lastModified();
if(diff > x *24*60*60*1000){
}

Ich bin ehrlich gesagt etwas verzweifelt.

Ich habe sogar versucht, das Jahr zu nehmen und alle Files die vom lastModified deren Jahr rauszuschreiben.

Oder allgemein habe ich den oberen Code noch nicht verstanden.

Viele Grüße
lam
 

Joose

Top Contributor
...aber irgendwie hatte es auch nicht wirklich bei mir funktioniert.
Was bedeutet dann "nicht wirklich funktioniert"? Laufzeitfehler, falsches Ergebnis (zu viel oder zu wenig gefiltert)?

Das erschwert sogar das debuggen.
Weil? Mit der passenden IDE kannst du während dem Debuggen diese Zahlen in ein Date umwandeln lassen um deren Richtigkeit zu testen.
Auch sagt ja keiner etwas wenn für Logausgaben der Wert eben in ein Date umgewandelt wird. Nur für die produktive Laufzeit sollte man solche Umwandlungen dann eben auskommentieren oder ähnliches.

Code:
long diff =newDate().getTime()- file.lastModified();
if(diff > x *24*60*60*1000){
}
Oder allgemein habe ich den oberen Code noch nicht verstanden.
Der Code berechnet sich zuerst die Differenz zwischen heutigen Datum/Uhrzeit und der letzten Bearbeitungszeit der Datei.
Dann wird geschaut ob dieser Wert größer ist als der gewünscht Grenzwert. In diesem Fall ist der Grenzwert x Tage.
24 Stunden * 60 Minuten * 60 Sekunden * 1000 Millisekunden * x Tage
 
Zuletzt bearbeitet:

Joose

Top Contributor
Schön dann hat der Filter nicht richtig funktioniert, aber so ohne Code lässt sichs auch schwer sagen was der Fehler war.
Probiere es nochmal umzusetzen und sollte das Problem weiterhin auftauchen, dann poste auch etwas von deinem Code.
 
K

kneitzel

Gast
Das Problem kann evtl. sein, dass x bei dir ein int ist, daher rechnet er bei dir alles über int aus und dabei bekommst du einen Überlauf. Und diff ist dann halt größer ... Also ((long)x) sollte das Problem ggf. lösen.
 
K

kneitzel

Gast
Ich habe das auch eben einmal ausgetestet - das ist tatsächlich das Problem. bei 30 Tagen bekommst Du als Integer-Wert nach der Berechnung -1702967296 raus. Und jede Differenz ist dann natürlich größer so dass alle Files ausgegeben werden.
Code:
if(diff > ((long)x) *24*60*60*1000){
sollte das Problem lösen - das hat es zumindest bei mir.
 

RalleYTN

Bekanntes Mitglied
kann man nicht einfach die list Methode der Klasse File mit einem FileFilter verwenden?

Java:
File directory = new File("Pfad zu meinem verzeichnis");
     File[] files = directory.listFiles(new FileFilter() {
       
       @Override
       public boolean accept(File file) {

         boolean accept = false;
         long actualTime = System.currentTimeMillis();
         long fileTime = file.lastModified();
         short daysBetween = (short)(((((actualTime - fileTime) / 1000) / 60) / 60) / 24);
         
         if(daysBetween <= 30) {
           
           accept = true;
         }
         
         return accept;
       }
     });
 
K

kneitzel

Gast
Jo, das wäre wohl auch die elegantere Version. Diese Anregung habe ich dann auch einmal aufgenommen und ein kleines Refactoring vorgenommen.

Code:
// In Klasse selbst
private final static long MILISECONDS_PER_DAY = 1000 * 60 * 60 * 24;

// In einer Funktion, wo es benötigt wird.
File directory = new File("Pfad zu meinem verzeichnis");
File[] files = directory.listFiles(file -> (System.currentTimeMillis() - file.lastModified()) / MILISECONDS_PER_DAY <= 30);

Eigentlich nur Deine Funktion vereinfacht:
- viele Klammern und den Cast braucht man nicht in der Berechnung.
- Magic Numbers werden durch Konstante ersetzt.
- Die beiden Funktionsaufrufe kann man direkt in die Berechnung setzen.
- Die Accept Variable braucht man nicht, da die ja nur direkt per return zurück gegeben wird.
- Vorletzte Änderung ist danach dann auf if (bedingung) return true; else return false; das return bedingung; zu machen.
- Und die letzte Änderung ist dann, die Funktion, die ausschließlich ein return Statement hat, als Lambda Ausdruck zu schreiben.

Das aber nur so am Rande als eine Möglichkeit. Deine Idee mit genau so einem Filter ist goldrichtig!
 

RalleYTN

Bekanntes Mitglied
Eigentlich nur Deine Funktion vereinfacht:
- viele Klammern und den Cast braucht man nicht in der Berechnung.
- Magic Numbers werden durch Konstante ersetzt.
- Die beiden Funktionsaufrufe kann man direkt in die Berechnung setzen.
- Die Accept Variable braucht man nicht, da die ja nur direkt per return zurück gegeben wird.
- Vorletzte Änderung ist danach dann auf if (bedingung) return true; else return false; das return bedingung; zu machen.
- Und die letzte Änderung ist dann, die Funktion, die ausschließlich ein return Statement hat, als Lambda Ausdruck zu schreiben.

Das aber nur so am Rande als eine Möglichkeit. Deine Idee mit genau so einem Filter ist goldrichtig!
Die Klammern habe ich nur für mehr übersicht da.
Ich versuche immer den kleinst möglichen Datentypen zu verwendenin der Hoffnung, dass ich etwas speicher spare. Und Lambda ist hässlich :p
 
Zuletzt bearbeitet von einem Moderator:
K

kneitzel

Gast
Nunja - dieses Speicher sparen um jeden Preis haut nur leider nicht wirklich hin, denn die CPUs heute arbeiten mit mind. 32 Bit. Drunter dürfte es wohl kaum noch geben, oder gibt es Java auf irgendwelchen 16 Bit Plattformen?
Somit hast Du zwar im Code die Begrenzung aber der Compiler ändert das dann, damit es schnell und zügig abgearbeitet werden kann. Aber ansonsten ist das Vorgehen generell gut und richtig - man sollte immer den passenden Datentyp wählen - unabhängig was für Optimierungen dann im Hintergrund evtl. laufen oder nicht laufen.

Und was die Lambdas angeht, hast Du da teilweise nicht Unrecht. Ich liebe an IntelliJ, dass es automatisch hin und zurück wandeln kann und dann schaue ich mir gerne mal an, wie es aussieht und wie gut es lesbar ist. Und oft verliert der Lambda Ausdruck dann. (Dies war aber einer der Fälle, bei dem ich es ok und lesbar fand. Aber das ist natürlich ein rein subjektiver Eindruck von mir!)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
d.lumpi JDA eclipse dateien versenden Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
L Dateien richtig auslesen Allgemeine Java-Themen 6
L Eclipse Runnable Jar mit Dateien Allgemeine Java-Themen 8
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
O jar und EXE Dateien, Pfade zur Laufzeit Allgemeine Java-Themen 1
W Dateien werden nicht gelöscht - warum? Allgemeine Java-Themen 12
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
I Java als exe veröffentlichen inkl. kompletter Dateien Allgemeine Java-Themen 4
M Drucken von Dateien Allgemeine Java-Themen 10
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
N Temporäre Dateien Allgemeine Java-Themen 3
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
V Eclipse .class Dateien Allgemeine Java-Themen 9
B Download von dateien Allgemeine Java-Themen 2
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
JavaWolf165 Externe .jar-Dateien in .jar-Datei intigrieren Allgemeine Java-Themen 0
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
J Java .jar Dateien zusammenführen Allgemeine Java-Themen 1
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
H PDFBox akzeptiert Dateien nicht Allgemeine Java-Themen 1
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
A Input/Output Spätes Schreiben von Dateien der JVM Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
S Exklusive Sperre auf Dateien: FileChannel, FileLock Allgemeine Java-Themen 0
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
R Importieren von Txt-Dateien in AbstractTableModel Allgemeine Java-Themen 0
C Dateien komprimieren und verschlüsseln Allgemeine Java-Themen 3
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
R Java Dateien "verschlüsseln" Allgemeine Java-Themen 2
L Passwortgeschützte Dateien Allgemeine Java-Themen 6
A Datentypen Dateien umbenennen mit Dateiendungen - Dateiendungen ausgeben Allgemeine Java-Themen 2
L Reparieren beschädigter PDF Dateien Allgemeine Java-Themen 3
F Dateien ins Array lagern und Optionen zur Auswahl, Allgemeine Java-Themen 5
J XML Dateien vergleichen Allgemeine Java-Themen 9
B Umbenennen von Dateien Allgemeine Java-Themen 2
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
W Best Practice Dateien parsen Allgemeine Java-Themen 3
B Dateien verschwinden aus bin Ordner?! Allgemeine Java-Themen 5
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
M Java Dateien verschieben Allgemeine Java-Themen 2
R Wav-Dateien wiederholt abspielen Allgemeine Java-Themen 2
L Methoden Verarbeitung von Größen Dateien Allgemeine Java-Themen 9
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
M Datentypen Jar-Dateien öffnen nicht mit Java Allgemeine Java-Themen 4
C Mit Java PDF Dateien bearbeiten. Allgemeine Java-Themen 2
B Input/Output .java-Dateien auslesen Allgemeine Java-Themen 17
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
E Vorschläge, effizientes Hashing von Dateien für vergleich Allgemeine Java-Themen 7
W Vergleich eines Datenträgers auf neue Dateien Allgemeine Java-Themen 14
C Java-Dateien in einheitlichen Zeichensatz umwandeln Allgemeine Java-Themen 10
E Dateien aus / im JAR Allgemeine Java-Themen 2
K LibreOffice Tabelle Dateien im Format .ods bearbeiten Allgemeine Java-Themen 2
L Input/Output Dateien erstellen, wenn ein JAR ausgeführt wird Allgemeine Java-Themen 13
L Generieren Zufallsdaten aus CSV dateien Allgemeine Java-Themen 11
G Namensgebung der Dateien von FileHandler Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben