Sicherlich eine der ersten Anforderungen an eine Programmiersprache ist
es, nach Verzeichnissen und Dateien suchen zu können.
Java macht es dem Entwickler ziemlich einfach. Die Klasse File bietet
schon weitreichende Möglichkeiten, nach Verzeichnissen und Dateien
suchen zu können. In anderen Umgebungen (WIN 32 API) ist allein dazu
schon weit mehr Aufwand erforderlich.
Jedoch soll hier eine Klasse implementiert werden, die die Möglichkeiten
der Klasse File etwas erweitert. Es soll die Möglichkeit geben,
- die Suche auf bestimmte Dateierweiterungen zu beschränken
- Unterverzeichnisse sollen mit durchsucht werden
- das Dateidatum soll berücksichtigt werden
- die Ergebnisliste soll sortiert werden
- über einen Listener wird über die Sucherfolge informiert
Dazu erstellen wir eine neue Klasse und nehmen ein Enum sowie diverse
Felder als Klassenvariablen auf
[highlight=java]
public class GFileSearch
{
public enum Date_Compare
{
DATE_BEFORE,
DATE_AFTER,
DATE_EQUAL
};
private String path;
private ArrayList<File> ergebnisListe;
private Set<String> extension;
private boolean extCaseSensitiv;
private boolean directorys;
private boolean unterverzeichnisse;
private boolean sort;
private Comparator<File> sortFileComparator;
private Date datum;
private Date_Compare datumcompare;
private PropertyChangeSupport propertySupport=new PropertyChangeSupport(this);
private boolean interrupted=false;
[/highlight]
Das Enum "Date_Compare" dient zur Bestimmung, ob bei Vorgabe eines
Datums das Datum der Datei übereinstimmen muss oder davor oder
dahinter liegen soll
Der String "path" nimmt das Startverzeichnis, ab dem eine Suche
erfolgen soll, auf
Die ArrayList "ergebnisliste" enthält nach erfolgter Suche das
Suchergebnis. Sie ist kumulativ. D.h. eine Suche mit der
gleichen Instanz der Klasse ohne eine Löschung der Liste, fügt
der Liste die neunen Ergebnisse hinzu.
Das Set "extension" enthält eine Liste von Dateiextension nach
denen gesucht wird.
Der boolean "extCaseSensitiv" zeigt an,ob bei der Suche mit denen in
der Liste "extension" angegeben Extensionen die Groß-/Kleinschreibung
berücksichtigt wird.
Der boolean "directorys" zeigt an,ob gefundene Verzeichnisse mit in
die Ergebnisliste aufgenommen werden.
Der boolean "unterverzeichnisse" zeigt an, ob Unterverzeichnisse
rekurisiv mit durchsucht werden
Der boolean "sort" zeigt an, ob die Ergebnisliste sortiert werden
soll.
Der Comparator "sortFileComparator" bestimmt, mit welchen Comparator
die Sortierung erfolgt.
Das Date "Datum" wird für den Vergleich mit dem Dateidatum herangezogen.
Für einen Datumsvergleich wird dann mit "datumcompare" festgelegt, wie
der Vergleich durchgeführt wird.
Um während der Suche seitens des aufrufenden Programmes anzeigen zu
können, welche Verzeichnisse und Dateinen gerade gefunden werden,
wird das Listenerkonzept von Java genutzt. Mit "propertySupport"
wird es ermöglicht, dass sich Listener anmelden können und informiert
werden.
Die laufende Suche kann mit dem Setzen des boolean "interrupted"
abgebrochen werden.
Im Konstruktor werden die Vorbelegungen gesetzt:
[highlight=java]
public GFileSearch()
{
this.path="";
this.ergebnisListe=new ArrayList<File>();
this.extension=new HashSet<String>();
this.extCaseSensitiv=false;
this.directorys=false;
this.unterverzeichnisse=false;
this.sort=false;
this.sortFileComparator=new GFileComparator();
this.datum=null;
}
[/highlight]
Die Getter und Setter und Hilfsmethoden für die
Klassenvariablen:
[highlight=java]
public String getPath()
{
return path;
}
public void setPath(String path)
{
this.path=path;
}
public ArrayList<File> getErgebnisListe()
{
return ergebnisListe;
}
public void clearErgebnisListe()
{
ergebnisListe.clear();
}
[/highlight]
Für mehrere Suchen in einer Instanz muss - wenn die Ergebnisse nicht
kumuliert werden sollen - die Ergebnisliste gelöscht werden
Comment