/***************************************************************/ /* Prof. Dr. Gregor Büchel */ /* Source: Dat9.java */ /* Stand : 09.04.2002 */ /* */ /* Testprogramm für eine Direkt-Zugriffs-Datei unter Nutzung */ /* der Klasse RandomAccessFile von Java. Die Nutzdaten haben */ /* folgendem Datensatzaufbau (ohne feste Datensatzlaenge): */ /* ::= (String) */ /* ::= (int) */ /* ::= (String) */ /* ::= (double) */ /* ::= */ /* */ /* Die Indexdatei wird durch folgenden Stream beschrieben: */ /* ::= (long) : Position des DS in der Nutzdatei */ /* ::= (int) : Anzahl der DS in der Nutzdatei */ /* ::={} */ /* */ /* Hinweis: Alle Lesemethoden der Klasse DataInputStream und */ /* alle Schreibmethoden der Klasse DataOutputStream stehen */ /* zur Verfügung. */ /***************************************************************/ import java.io.*; class Dat9 { public static void main(String args[]) throws IOException {int iz,m,k,ia=1,ip,eplz,aplz,ogr=100,ads,ads1; String ename,eort; String aname,aort; long pos, posw; long posfeld[]; double egehalt,agehalt,sum; boolean b1; ename=new String(); eort=new String(); aname=new String(); aort=new String(); do {m=menue(); switch(m) {case 1: File pix = new File("pers.idx"); b1=pix.isFile(); if (b1==true) { FileInputStream pe1 = new FileInputStream("pers.idx"); DataInputStream dx1 = new DataInputStream(pe1); /* Indexdatei lesen */ /* Anzahl Datensatzpositionen holen */ ads=dx1.readInt(); System.out.println("Anzahl Datensatzpositionen: "+ads); /* Anlegen des Datensatzpositionsfeldes */ posfeld=new long[ads+ogr]; /* Datensatzpositionen lesen */ for (k=0; k 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.); /* Schreibposition setzen */ da1.seek(posw); /* DS schreiben */ da1.writeUTF(ename); da1.writeInt(eplz); da1.writeUTF(eort); da1.writeDouble(egehalt); /* Nächste Schreibposition bestimmen */ posw=da1.getFilePointer(); posfeld[ads+iz]=posw; System.out.println("Position bei DS-Ende: "+posw); iz=iz+1; System.out.println("Einen nächsten Datensatz erfassen?(ja=1/nein=0)"); ia=IO1.einint(); if (iz>=ogr) ia=0; } while(ia==1); System.out.println(iz+" neue Datensätze geschrieben"); da1.close(); FileOutputStream px3 = new FileOutputStream("pers.idx"); DataOutputStream dx3 = new DataOutputStream(px3); dx3.writeInt(ads+iz); for (k=0; kads1); k=k-1; /* Lesen im Direktzugriff */ dp1.seek(posfeld[k]); aname=dp1.readUTF(); aplz=dp1.readInt(); aort=dp1.readUTF(); agehalt=dp1.readDouble(); System.out.println((k+1)+".Datensatz(Pos="+posfeld[k]+"): " +aname+" "+aplz+" "+aort+" "+agehalt); 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("Byteorientierte Dateiverarbeitung im Direktzugriff:"); System.out.println("(1) Erzeugen und Schreiben von Datensaetzen"); System.out.println("(2) Sequentielles Lesen aller Datensaetze"); System.out.println("(3) Direktes Lesen eines Datensatzes"); System.out.println("(9) ENDE"); System.out.println("Bitte wählen Sie!"); ir=IO1.einint(); return ir; } }