Guten Morgen,
Wie gestern schon angekündigt wollte ich jetzt mal mein aktuelles Nebenbeiprojekt vorstellen.
Das CFileSystem
Vorweg: Mit Filesystem ist nicht sowas wie NTFS, FAT32 usw. gemeint.
Zunächst mal etwas zur Idee dahinter. Im Prinzip haben mich 2 Gründe zu diesem Projekt getrieben. Einmal wollte ich für ein anderes Projekt bestimmten Teilen (PlugIns :D) eine Möglichkeit bieten Dateien zu speichern, ohne zu viele Fehlerquellen was Sicherheit angeht zuzulassen. Der andere Grund war, dass ich Häufig solche oder ähnliche Konstrukte hatte
File f=new File(SOME_PATH);
File parent=f.getParent();
if(!f.exists())
{
if(!parent.exists())
{
parent.mkDirs();
}
f.createNewFile();
}
(und das ganze noch nichtmal ohne Fehlerbehandlung)
Natürlich könnte man das ganze in eine Methode auslagern, aber am Ende will man hier und da doch vllt was anderes haben.
Also habe ich mir überlegt ich erstelle eine Abstraktionsschicht zu basteln, die diese Aufgaben übernehmen kann und eine einfach zu benutzende Schnittstelle bietet.
Gesagt getan, so ist das CFileSystem entstanden (das C steht für Clayn ;)).
Aber worum geht es eigentlich? Im Prinzip gibt es 3 wichtige Komponenten: CFileSystem, Directory und SimpleFile.
Das CFileSystem ist die Grundlage um an Directories und Files zu kommen. Jedes Filesystem besitzt ein Root-Directory.
Ein Directory ist, wie der Name schon sagt, ein Ordner und beinhaltet entweder Dateien oder weiter Ordner.
Die SimpleFile stellt eine Datei dar. Der Name ist einerseits zur Abtrennung von java.io.File aber auch zum deutlich machen, dass es einfach sein soll.
Diese drei Komponenten sind alles Interfaces und dienen dazu beliebige Implementationen zuzulassen.
Für den Anfang habe ich schon 2 davon erstellt. Eine Implementation arbeitet auf dem lokalen Filesystem, die andere über SQL auf einer Datenbank.
Für den Benutzer ist es am Ende egal welche Implementation man nimmt.
Was kann man nun mit den Komponenten machen?
Sowohl Directory als auch SimpleFile bieten im Grunde die wichtigsten Funktionen an: Erstellen, Löschen, Lesen und Schreiben.
Mal ein kleines Beispiel
CFileSystem cfs=new FancyFileSystem();
Directory root=cfs.getRoot();
SimpleFile file=root.getFile("SomeFile.txt");
Jetzt hat man zunächst das Root Directory (welches immer erstellt sein sollte [wird durch Tests „verifiziert“]) und eine Datei. Die Datei existiert zunächst nicht „wirklich“
Man hat jetzt 2 Möglichkeiten die Datei zu erstellen. Entweder file.create();
oder file.createSafe();
Der Unterschied zwischen den beiden Methoden ist, dass createSafe keine Exception wirft, falls die Datei vorhanden ist und alle nötigen Verzeichnisse erstellt.
Jetzt existiert die Datei dauerhaft und kann gelesen und geschrieben werden.
Noch etwas Allgemeines zum Schluss:
Das gesamte Projekt besteht aus 5 Projekten.
API - Liefert die Schnittstellen und verschiedene Utility Sachen
Local - Eine Implementation die auf dem lokalen Filesystem arbeitet
SQL - Eine Implementation die auf einer SQL Datenbank arbeitet
Impl - Sammelt einfach alle von mir erstellten Implementationen
Test - Liefert allgemeine Tests die nur ein CFileSystem benötigen und es Implementationen ermöglichen einfach getestet zu werden
So und jetzt… reißt mir den Kopf ab
P.S.
Was ich vergessen hatte zu erwähnen, es handelt sich um NetBeans bzw. Maven Projekte und benötigen Java 1.8.