/***************************************************************/ /* Prof. Dr. Gregor Büchel */ /* Source: Dat8.java */ /* Stand : 09.04.2002 */ /* */ /* Testprogramm für das serialisierte Schreiben und Lesen von */ /* Objekten in bzw. von Dateien. Hier findet die serialisierte */ /* Dateiverarbeitung von Objekten der Klasse Persds statt, die */ /* folgendem Aufbau (ohne feste Attributlaengen) hat: */ /* ::= (String) */ /* ::= (int) */ /* ::= (String) */ /* ::= (double) */ /* ::= */ /* */ /***************************************************************/ import java.io.*; class Dat8 { public static void main(String args[]) throws IOException, ClassNotFoundException {int iz=0,m,ia=1,eplz; String ename,eort; Persds person, p1; double egehalt,sum=0.; ename=new String(); eort=new String(); do {m=menue(); switch(m) {case 1: FileOutputStream pa1 = new FileOutputStream("aobj1.aus"); ObjectOutputStream da1 = new ObjectOutputStream(pa1); do {/* erfassen */ System.out.println("Bitte eingeben:"); ename=IO1.einstring(); /* erfassen */ System.out.println("Bitte eingeben:"); do { eplz=IO1.einint(); if (eplz<1000||eplz>99999) {System.out.println("Die deutsche PLZ liegt zwischen 1000 und 99999."); System.out.println("Daher bitte Neueingabe der PLZ!"); } } while (eplz<1000||eplz>99999); /* erfassen */ System.out.println("Bitte eingeben:"); eort=IO1.einstring(); /* erfassen */ System.out.println("Bitte eingeben:"); do { egehalt=IO1.eindouble(); if (egehalt<0.) {System.out.println("Dieses System kennt keine negativen Gehälter."); System.out.println("Daher bitte Neueingabe des GEHALTS!"); } } while (egehalt<0.); /* das zu schreibende Objekt aufbauen */ person=new Persds(ename,eplz,eort,egehalt); /* das serialisierte Schreiben des Objekts in die Datei */ da1.writeObject(person); iz=iz+1; System.out.println("Ein nächstes Objekt erfassen?(ja=1/nein=0)"); ia=IO1.einint(); } while(ia==1); System.out.println(iz+" Objekte geschrieben"); da1.close(); break; case 2: FileInputStream pe1 = new FileInputStream("aobj1.aus"); ObjectInputStream de1 = new ObjectInputStream(pe1); iz=0; p1=new Persds(" ",0," ",0.0); /* Leseblock mit EOF-Steuerung */ try { while(true) {/* Lesen eines Objekts aus der Eingabedatei */ p1=(Persds)de1.readObject(); /* Einzelsatzverarbeitung */ iz=iz+1; sum=sum+p1.gehalt; System.out.println(iz+". Objekt: "+p1.name+" "+p1.plz+" " +p1.ort+" "+p1.gehalt); } } catch(EOFException eo1) {System.out.println("Zustand: "+eo1.toString()); /* Dateiverbindung schliessen */ de1.close(); /* Dateiendeverarbeitung */ System.out.println("Gehaltssumme : "+sum); sum=sum/iz; System.out.println("Durchschnittsgehalt: "+sum); System.out.println("Anzahl gelesener Datensätze: "+iz); } break; case 9: System.out.println("ENDE!"); break; default: System.out.println("Unzulaessige Eingabe!"); } } while(m!=9); } public static int menue() {int ir; System.out.println("Serialisierte Dateiverarbeitung von Objekten:"); System.out.println("(1) Erzeugen und Schreiben von Objekten"); System.out.println("(2) Lesen von Objekten"); System.out.println("(9) ENDE"); System.out.println("Bitte wählen Sie!"); ir=IO1.einint(); return ir; } }