Praktikum aus Softwareentwicklung 2 SS 2009, LVA 365.009 Abgabetermin: 24.3.2009 Erreichbare Punkte: 24 Übung 1 – Grundlegende Java-Bibliotheken Aufgabe 1: I/O 19 Punkte Implementieren Sie eine File-Manager Klasse mit folgender Schnittstelle: import java.io.*; public interface FileManager { public void copy(File from, File to); public void transform(InputStream from, String fromCharset, OutputStream to, String toCharset); public void zip(File from, File to); public void unzip(File zip, File toFolder); public void encrypt(InputStream from, OutputStream to); public void decrypt(InputStream from, OutputStream to); public void writeObject(Serializable object, String toFile); public Object readObject(String fromFile); } Die Methode copy kopiert die Datei oder das Verzeichnis from möglichst performant nach to. Ein Verzeichnis soll dabei mit Hilfe der Klasse java.io.File rekursiv abgearbeitet werden. Die Methode transform ermöglicht das Konvertieren einer Textdatei in einen bestimmten Zeichensatz. Testen Sie das Konvertieren mit einer Textdatei, die mit dem Default-Zeichensatz Ihrer Laufzeitumgebung gespeichert ist und beim Kopieren in die UTF-16 Kodierung umgewandelt wird. Die resultierende Kopie sollte wiederum in den Default-Zeichensatz transformiert werden. Verwenden sie: java.nio.Charset.defaultCharset() Die Methode zip komprimiert die Datei oder das Verzeichnis from. Die resultierende ZIP Datei wird durch den Parameter to angegeben. Verwenden Sie dazu die Klasse java.util.zip.ZipOutputStream. Implementieren analog dazu unzip zum expandieren einer ZIP Datei. Die Methoden encrypt und decrypt kopieren beliebige Dateien, wobei diese ver- bzw. entschlüsselt werden. Implementieren Sie jeweils einen geeigneten Filter. Überschreiben Sie alle entsprechenden read/write Methoden. Für das ver- und entschlüsseln können Sie den XOR Operator verwenden, welcher byte-weise mit dem Schlüssel (key) angewendet werden kann. Der key soll im Konstruktor übergeben werden, etwa so: public class CryptoOutputStream extends FilterOutputStream { private OutputStream targetOut; private int key; Seite 1/2 public CryptoOutputStream(OutputStream targetOut, int key) { super(targetOut); this.targetOut = targetOut; this.key = key; } @Override public void write(int b) throws IOException { targetOut.write(b ^ key); } … Die Methoden writeObject und readOject erlauben serialisierbare Objekte in eine Datei zu schreiben beziehungsweise wieder von der entsprechenden Datei einzulesen. Testen sie dies mit Objekten vom Typ ContactEntry mit folgenden Daten: private private private private private private int id; String firstName; String lastName; String email; Date birthday; ContactEntry[] friends; Implementieren und testen Sie eine zusätzliche Variante ContactEntry2 in welcher die Membervariable friends nicht serialisiert wird. Aufgabe 2: Reflection 5 Punkte Implementieren Sie ein Programm, das mittels Reflection die Klasse java.lang.Integer lädt, ein Objekt mit einem beliebigen Integer Wert instanziert und die Methode toString ausführt. Abgaberichtlinien Bitte verwenden Sie für die Abgabe pro Übung einen JAR File, der alle Aufgaben enthält inklusive aller für die Ausführung benötigten Dateien, auch den Quellcode. Strukturieren Sie auch entsprechend mit passenden Packages. Jeder JAR soll im Rootverzeichnis ein README.txt enthalten, der Auskunft gibt für welche Aufgabe welche Klasse(n) Einstiegspunkt für Ihre Implementierung ist. Darin können auch zsätzliche Hinweise für die korrekte Verwendung vermerkt sein. Bei nicht trivialen Programmstellen fügen Sie entsprechend Javadoc bei. Verwenden Sie zur Erstellung des JARs möglichst ein Export Feature Ihrer IDE (Eclipse: File – Export…), so dass beim Korrigieren nur mehr ein analoges Import notwendig ist. Achten Sie bitte auch darauf, dass ihre Programme kompilierbar sind. Beachten Sie bitte die Termine für die Abgabe – siehe Angabe. Seite 2/2