Praktikum aus Softwareentwicklung 2 SS 2008, LVA 365.009 Abgabetermin: 8.4.2008 Erreichbare Punkte: 24 Übung 1 – Grundlegende Java-Bibliotheken Aufgabe 1: I/O 16 Punkte Implementieren Sie eine Filemanager Klasse mit folgender Schnittstelle: public interface FileManager { public void copy(String from, String to); public void copy(String from, String fromCharset, String to, String toCharset); public int grep(String from, String txt, PrintWriter out); public void encrypt(String from, String to); public void decrypt(String from, String to); } Die beiden Methoden copy kopieren eine Datei from möglichst performant nach to, wobei optional eine Konvertierung in einen bestimmten Zeichensatz erfolgt. Testen Sie das Konvertieren mit einer Textdatei, die mit dem Default-Zeichensatz Ihrer Laufzeitumgebung gespeichert ist und beim Kopieren in die UTF-8 Kodierungen umgewandelt wird. Die resultierende Kopie sollte wiederum kopiert werden, wobei diese wieder in den Default-Zeichensatz konvertiert werden soll. Zur Bestimmung des Default-Zeichensatzes verwenden Sie bitte die Methode: java.nio.Charset.defaultCharset() Die Methode grep sollte eine Textdatei zeilenweise verarbeiten und in jeder Zeile nach einem bestimmten Teilstring (siehe Parameter txt) suchen. Ist txt enthalten, soll die Zeile auf den PrintWriter geschrieben werden. Zum Testen können Sie dafür System.out verwenden (siehe Konstruktoren von PrintWriter). Als Rückgabewert soll die Anzahl der gefundenen Zeilen ausgegeben werden. Implementieren Sie für das zeilenweise Suchen einen Filter. 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 byteweise 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; public CryptoOutputStream(OutputStream targetOut, int key) { super(targetOut); Seite 1/2 this.targetOut = targetOut; this.key = key; } @Override public void write(int b) throws IOException { targetOut.write(b ^ key); } … Aufgabe 2: Class Spy 8 Punkte Implementieren Sie ein Programm, dem via Kommandozeilenparameter ein vollständiger Klassenname übergeben wird. Diese Klasse soll anschließend dynamisch geladen werden und mit Hilfe von Reflection (java.lang.reflect) möglichst genau untersucht werden. Geben Sie dazu alle Informationen die Sie zu dieser Klassen finden können in der Konsole aus (Interfaces, Superklasse, Methoden und Parameter, auch private…). Testen Sie mit verschiedenen Java Klassen, zum Beispiel java.lang.Integer… Abgaberichtlinien (gelten auch für zukünftige Übungen) 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