package Uebung2_loesung.Indexverwaltung; import java.io.*; public class Index { // Attribute private final int MAX = 10; private String dateiname = "Indexdatei.txt"; private int indextabelle[]; // 0 .. MAX-1 private RandomAccessFile eineIndexDatei; // Konstruktor public Index() { indextabelle = new int[MAX]; // Initialisierung der indextabelle for(int i = 0; i < MAX; i++) indextabelle[i] = -1; // Kein Datensatz zu Schluessel vorhanden } // Methoden public void erzeugeEintrag(int schluessel, int index) throws IOException { /** Speichert zu einen Schluessel den zugehoerigen * Datensatz-Index in der indextabelle */ if(schluessel < MAX) indextabelle[schluessel] = index; // Aktualisieren der Indexdatei, // d. h. Abspeichern der Datei aktualisiereIndexDatei(schluessel); } public int gibIndexZuSchluessel(int schluessel) // throws InvalidIndexException { /* // Gibt zu dem Schluessel den gefundenen // Datensatz-Index zurueck if(schluessel < MAX) return indextabelle[schluessel]; // oder -1, wenn Schluessel zu gross ist else return -1; */ if(schluessel >= MAX || indextabelle[schluessel] == -1) throw new InvalidIndexException(schluessel); return indextabelle[schluessel]; } public void ladeIndexDatei() throws IOException { /** Liest die Indextabelle vollstaendig aus einer Datei * Dies geschieht nur beim Start des Programms */ eineIndexDatei = new RandomAccessFile(dateiname, "r"); int index; for(int schluessel = 0; schluessel < MAX; schluessel++) { index = eineIndexDatei.readInt(); indextabelle[schluessel] = index; } eineIndexDatei.close(); } public void speichereIndexDatei() throws IOException { /** Speichert die Indextabelle vollstaendig in einer Datei * Dies geschieht beim Beenden des Programs */ eineIndexDatei = new RandomAccessFile(dateiname, "rw"); for(int schluessel = 0; schluessel < MAX; schluessel++) eineIndexDatei.writeInt(indextabelle[schluessel]); eineIndexDatei.close(); } private void aktualisiereIndexDatei(int schluessel) throws IOException { /** Aktualisiert die indextabelle in der Indexdatei * Dies geschieht beim Hinzufuegen eines neuen * Indexes oder Aendern eines alten Indexes */ eineIndexDatei = new RandomAccessFile(dateiname, "rw"); // eine int-Zahl belegt 4 Bytes eineIndexDatei.seek((long)(schluessel * 4)); eineIndexDatei.writeInt(indextabelle[schluessel]); eineIndexDatei.close(); } // Zum Testen public void gibIndextabelleAus() { int schluessel = 0; for(int element : indextabelle) { System.out.println(schluessel + " " + element); schluessel++; } } }