PsychedelicSpark
Grünschnabel
Ja, das Problem hat sich erledigt.
Es ist zwar bislang nicht die Code- und Leistungs-sparendste Lösung, aber immerhin tut das Programm schon mal genau das, was es auch tun soll. Nicht mehr und auch nicht weniger.
Falls es dich interessiert, wie ich es gelöst habe, hier der Code:
Und bitte: bewerft mich nicht mit Steinen, wenn ihr seht, wie viel unnötigen Code ich da reingebastelt habe
Momentan bin ich aber noch an einer "besseren" und auch schöneren Lösung dran, bei der man als zusätzlicher Parameter noch mitgeben kann, wie viele der neusten Dateien behalten werden sollen.
Es ist zwar bislang nicht die Code- und Leistungs-sparendste Lösung, aber immerhin tut das Programm schon mal genau das, was es auch tun soll. Nicht mehr und auch nicht weniger.
Falls es dich interessiert, wie ich es gelöst habe, hier der Code:
Und bitte: bewerft mich nicht mit Steinen, wenn ihr seht, wie viel unnötigen Code ich da reingebastelt habe
Java:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Vector;
public class Main
{
public static boolean noFurtherDirectories;
public static void main(String[] args)
{
File file = new File(args[0]);
myMethod(file);
}
public static void myMethod(File directory)
{
File[] files = directory.listFiles();
File fileOne = new File("C:/Tests"); // Puffer-File 1
File fileTwo = new File("C:/Tests"); // Puffer-File 2
Vector<File> vec = new Vector<File>();
// Eine Datei oder ein Verzeichnis vorhanden/zugreifbar?
if(files!=null)
{
// Beim letzten Verzeichnis des Verzeichnisbaums angelangt?
for(File file : files)
{
files = directory.listFiles();
if(file.isDirectory()==false)
noFurtherDirectories=true;
else
noFurtherDirectories=false;
}
// Jede Datei im Verzeichnis überprüfen
for(File file : files)
{
files = directory.listFiles();
// Ist es ein Verzeichnis?
if(file.isDirectory()==true)
{
// Neuste Datei des vorherigen Verzeichnisses ermitteln
for(int i=0; i<vec.size(); i++)
{
if(vec.get(i).lastModified()>fileOne.lastModified())
fileOne = vec.get(i);
}
// 2. neuste Datei des vorherigen Verzeichnisses ermitteln
for(int i=0; i<vec.size(); i++)
{
if(vec.get(i).lastModified()>fileTwo.lastModified() && vec.get(i).lastModified()<fileOne.lastModified())
fileTwo = vec.get(i);
}
// Alle Dateien aus Puffer-Liste löschen
vec.removeAllElements();
// Pfad des oberen Verzeichnisses im Verzeichnisbaum ermitteln
File parent = new File(file.getParent());
// Aufruf der Lösch-Methode
delete(parent, fileOne, fileTwo);
// Die Methode ruft sich selber auf
myMethod(file);
}
else // Ist es eine Datei?
vec.add(file); // Der Puffer-Liste die momentane im Fokus stehende Datei hinzufügen
}
// Wenn kein Unterverzeichnis mehr vorhanden
if(noFurtherDirectories == true)
{
for(File file : files)
{
for(int i=0; i<vec.size(); i++)
{
if(vec.get(i).lastModified()>fileOne.lastModified())
fileOne = vec.get(i);
}
for(int i=0; i<vec.size(); i++)
{
if(vec.get(i).lastModified()>fileTwo.lastModified() && vec.get(i).lastModified()<fileOne.lastModified())
fileTwo = vec.get(i);
}
vec.removeAllElements();
//Aufruf Lösch-Methode, jedoch mit dem Pfad des momentanen Verzeichnisses
delete(directory, fileOne, fileTwo);
}
}
}
else // Nicht lesbar oder keine zugriffsrechte?
System.out.println("Keine Berechtigung...");
}
// Lösch-Methode
public static void delete(File directory, File fileOne, File fileTwo)
{
File[] files = directory.listFiles();
if(files!=null)
{
for(File file : files)
{
files = directory.listFiles();
// Ist es eine Datei? (Kein Verzeichnis)
if(file.isFile())
{
// Wenn nicht die neuste oder 2. neuste Datei
if(file.equals(fileOne)==false && file.equals(fileTwo)==false)
file.delete(); //löschen
}
}
}
else
System.out.println("Keine Berechtigung...");
}
}
Momentan bin ich aber noch an einer "besseren" und auch schöneren Lösung dran, bei der man als zusätzlicher Parameter noch mitgeben kann, wie viele der neusten Dateien behalten werden sollen.