Übung Softwareentwicklung 2 SS 2005 Übung 04: Datei-Manager Abgabetermin: Name: 14. 04. 2005 Matrikelnummer: Informatik: G1 (Prähofer) G2 (Prähofer) G3 (Wimmer) WIN: G1 (Schwinger) G2 (Schwinger) G3 (Kronsteiner) Aufgabe Übung 4 Punkte abzugeben schriftlich 24 G4 (Ibrahim) G4 (Wimmer) G5 (Ibrahim) abzugeben elektronisch Prosabeschreibung, Java-Klassen für die Dateiverwaltung, Testprogramm für die Dateiverwaltung, Testausgabe dieses Programms. Java-Klassen für die Dateiverwaltung, Testprogramm für die Dateiverwaltung. Java-Klassen des Datei-Managers, Ausgabe für ein Test-Verzeichnis. Java-Klassen des Datei-Managers. Übung 04: Datei-Manager korr. Pkte (24 Punkte) Teil 1: Verwaltung von Dateien und Verzeichnissen (16 Punkte) Implementieren Sie eine Klassenhierarchie für die Repräsentation von Dateien (Klasse FileNode) und Verzeichnissen (Klasse DirectoryNode). Dateien haben einen Namen und eine Länge, Verzeichnisse einen Namen und weitere Unterelemente (Dateien und Verzeichnisse). Diese sollen in einer gemeinsamen, sortierten Liste verwaltet werden. Verwenden Sie dazu Klassen und Interfaces aus dem Java Collection Framework. Erklären Sie in der Prosabeschreibung, warum Sie diese Klassen gewählt haben. Implementieren Sie alle nötigen get- und set-Methoden für die Felder. Die Liste mit den Unterelementen soll nicht direkt zugänglich sein, sondern es soll beim Zugriff ein Array mit allen Unterelementen geliefert werden. Dateien und Verzeichnisse sollen nach folgenden Kriterien sortiert werden (angelehnt an die Sortierung im Explorer von Windows XP): • • • • Verzeichnisse vor Dateien. Verzeichnisse alphabetisch. Dateien, deren Name mit einer Zahl beginnt, aufsteigend nach dieser Zahl. Negative Zahlen können ignoriert werden. Wenn die Zahl am Beginn gleich ist, oder wenn am Beginn keine Zahl steht, alphabetisch. Bei der alphabetischen Sortierung soll die Groß- und Kleinschreibung ignoriert werden. Es soll nicht möglich sein, dass ein Verzeichnis zwei Elemente enthält, die nach diesen Kriterien gleich sind. Beispiel für eine korrekte Sortierung von Dateinamen: "2 ab", "2 Ac", "10 ab", "ab", "aC". Um die Klassenhierarchie flexibel einsetzen zu können, sollen alle Dateien und Verzeichnisse ein Feld userData besitzen. Verwenden Sie dazu einen generischen Typ-Parameter. Versuchen Sie, Compiler-Warnungen möglichst zu vermeiden. Wenn sich eine Warnung nicht vermeiden lässt, muss diese in einem Kommentar gerechtfertigt werden. Übung Softwareentwicklung 2 SS 2005 Testen Sie die Klassen wie in den vorigen Übungen. Folgende Fälle müssen auf jeden Fall getestet werden: Sortierreihenfolge, Duplikate in der Liste, Verwendung verschiedener Typ-Parameter für userData. Ist es möglich, einem Verzeichnis eine Datei hinzuzufügen, die mit einem anderen Typ parametrisiert wurde als das Verzeichnis? Testen Sie auch das! Teil 2: Datei-Manager (8 Punkte) Verwenden Sie die Klassen aus dem vorigen Teil, um eine Datei- und Verzeichnis-Liste für ein Verzeichnis der Festplatte auszugeben. Bauen Sie dazu die entsprechende Struktur aus FileNodes und DirectoryNodes auf. Verwenden Sie das Feld userData, um das Datum der letzten Änderung zu speichern (als Objekt der Klasse java.util.Date) Für den Zugriff auf das Dateisystem bietet Java die Klasse java.io.File an. Die Methode getName() liefert den Dateinamen, length() liefert die Dateigröße und lastModified() das Änderungsdatum. Mit isDirectory() können Sie feststellen, ob es sich um eine Datei oder ein Verzeichnis handelt, und listFiles() liefert eine Liste mit allen Dateien und Unterverzeichnissen eines Verzeichnisses. Geben Sie dann die Struktur mit allen Feldern auf der Konsole aus. Das Wurzel-Verzeichnis soll dem Programm als Parameter übergeben werden. Das folgende Beispiel zeigt eine mögliche Testausgabe für ein Verzeichnis mit einigen Dateien und Unterverzeichnissen: Test 100 abc file 1 in file 2 in 20 abc 3 abc abc file 1 in file 2 in 3 abc.txt 20 abc.txt 100 abc.txt -1 abc.txt -20 abc.txt -abc.txt abB.txt abc.txt abc1.txt abD.txt dir dir dir dir Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Fri Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr Apr 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 07:00:00 08:00:00 08:00:01 08:00:02 08:01:00 08:02:00 08:03:00 08:03:01 08:03:02 08:04:00 08:05:00 08:06:00 08:07:00 08:08:00 08:09:00 08:10:00 08:11:00 08:12:00 08:13:00 CEST CEST CEST CEST CEST CEST CEST CEST CEST CEST CEST CEST CEST CEST CEST CEST CEST CEST CEST 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 [DIR] [DIR] (10 bytes) (20 bytes) [DIR] [DIR] [DIR] (30 bytes) (40 bytes) (10 bytes) (20 bytes) (30 bytes) (40 bytes) (50 bytes) (60 bytes) (70 bytes) (80 bytes) (90 bytes) (100 bytes)