// Importe import java.util.Vector; import java.util.Enumeration; import java.io.PrintWriter; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.FileReader; /** * Die Klasse IO stellt die Reader und Writer zum Speichern bzw. Laden bereit * und ruft das Speichern und Laden auf */ public class IO { /** * Die Methode main initialisiert die Reader und Writer, speichert einen * Testdatenbestand und liest ihn wieder aus * * @param argv Aufrufparameter * * @author Dirk Ohst */ public static void main (String argv[]) { PrintWriter out; BufferedReader in; FileWriter fOut; TestData data; TestData loadedData; data = TestData.createTestData(); try { fOut = new FileWriter("foo.data"); out = new PrintWriter(new BufferedWriter(fOut)); data.save(out); out.close(); System.out.println(data); in = new BufferedReader(new FileReader("foo.data")); loadedData = TestData.load(in); System.out.println(loadedData); } catch (Exception e) { System.err.println("IO Fehler"); e.printStackTrace(); } } } /** * Die Klasse TestData repräsentiert einen Testdatenbestand bestehend * aus einem Vector, einem String und einem Integer, der gespeichert * und geladen werden soll */ class TestData { /** * data: der Vector im Testdatenbestand */ private Vector data; /** * name: der String im Testdatenbestand */ private String name; /** * zahl: der Integerwert im Testdatenbestand */ private int zahl; /** * Die Methode createTestData erstellt einen Testdatenbestand vom * Typ TestData * * @return TestData die Testdaten * * @author Dirk Ohst */ public static TestData createTestData() { TestData help; TestData root; root = new TestData(); root.name = new String ("root"); root.zahl = 42; root.data = new Vector(); for (int i = 0; i < 10; i++) { help = new TestData(); root.data.add(help); help.name = Integer.toString(i); help.zahl = i * 42; help.data = new Vector(); } return root; } /** * Die Methode save schreibt ein Objekt der Klasse TestData in lesbarer * Form in eine Textdatei * * @param out der PrintWriter, über den in die Datei geschrieben werden * soll * * @author Dirk Ohst */ public void save(PrintWriter out) { String result; TestData entry; int len; out.println(name); out.println(zahl); len = data.size(); out.println(len); for (int i = 0; i < len; i++) { entry = (TestData) data.get(i); entry.save(out); } } /** * Die Methode load liest aus einer Textdatei ein Objekt des Typs TestData * aus * * @param in der BufferedReader, über den aus der Datei ausgelesen werden * soll * * @return das ausgelesene Element vom Typ TestData * * @throws Exception wird ausgeloest, wenn beim Laden ein Fehler auftritt * * @author Dirk Ohst */ public static TestData load (BufferedReader in) throws Exception { TestData acElem = new TestData(); TestData help; String line; int len; /* ** readLine funktioniert nur solange, wie in den zu speichernden ** String keine \n Zeichen enthalten sind, was z.B. bei dem Inhalt ** einer TextArea moeglich ist. Hier muss man den Inhalt als einen ** Datenblock schreiben und wieder lesen. */ line = in.readLine(); acElem.name = line; line = in.readLine(); acElem.zahl = Integer.decode(line).intValue(); acElem.data = new Vector(); line = in.readLine(); len = Integer.decode(line).intValue(); for (int i = 0; i < len; i++) { help = load(in); acElem.data.add(help); } return acElem; } /** * Die Methode toString wandelt ein Objekt vom Typ TestData in einen * String um * * @return das in String umgewandelte Objekt * * @author Dirk Ohst */ public String toString () { String result; TestData entry; result = new String(name); result += " " + zahl + " "; Enumeration allData = data.elements(); while (allData.hasMoreElements()) { entry = (TestData) allData.nextElement(); result += entry.toString(); result += " | "; } return result; } }