Praktikum aus Softwareentwicklung 2 Übung 1 – Grundlegende

Werbung
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
Herunterladen