102 lines
2.6 KiB
Java
102 lines
2.6 KiB
Java
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++;
|
|
}
|
|
}
|
|
}
|