Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage
<< | < | > | >> | API | Kapitel 20 - Random-Access-I/O

## 20.1 Grundlegende Operationen

- 20.1 Grundlegende Operationen

Neben der stream-basierten Ein- und Ausgabe bietet die Java-Klassenbibliothek auch die Möglichkeit des wahlfreien Zugriffs auf Dateien. Dabei wird eine Datei nicht als Folge von Bytes angesehen, die nur sequentiell durchlaufen werden kann, sondern als eine Art externes Array, das an beliebiger Stelle gelesen oder beschrieben werden kann.

Für den Zugriff auf Random-Access-Dateien stellt das Paket `java.io` die Klasse `RandomAccessFile` zur Verfügung. Anders als bei der stream-orientierten Ein-/Ausgabe kann dabei allerdings nur auf "echte Dateien" zugegriffen werden; die Verwendung von Arrays oder Pipes als Dateiersatz wird nicht unterstützt. Auch das bei Streams realisierte Filterkonzept ist in Random-Access-Dateien nicht zu finden.

Die Klasse `RandomAccessFile` stellt Methoden zum Anlegen neuer Dateien und zum Öffnen vorhandener Dateien zur Verfügung. Für den lesenden oder schreibenden Zugriff auf die Datei gibt es ähnliche Methoden wie bei der sequentiellen Dateiverarbeitung. Zusätzlich kann der Satzzeiger wahlfrei positioniert werden, und es ist möglich, seine aktuelle Position abzufragen.

Das Öffnen von Random-Access-Dateien erfolgt mit dem Konstruktor der Klasse `RandomAccessFile`, der in zwei verschiedenen Varianten zur Verfügung steht:

    public RandomAccessFile(File file, String mode)
      throws IOException

    public RandomAccessFile(String name, String mode)
      throws FileNotFoundException
| java.io.RandomAccessFile

Bei der Übergabe des `String`-Parameters `name` wird die Datei mit diesem Namen geöffnet und steht für nachfolgende Schreib- und Lesezugriffe zur Verfügung. Bei der Übergabe eines `File`-Objekts wird die durch dieses Objekt spezifizierte Datei geöffnet (die Klasse `File` wird in Kapitel 21 besprochen). Der zweite Parameter `mode` gibt die Art des Zugriffs auf die Datei an. Er kann entweder "r" sein, um die Datei nur zum Lesen zu öffnen, oder "rw", um sie zum Schreiben und zum Lesen zu öffnen. Ein reiner Schreibmodus, wie er beispielsweise unter UNIX möglich wäre, wird nicht unterstützt.

|  |  |  | Während der Testphase des JDK 1.2 wurde die Deklaration der Konstruktoren teilweise dahingehend geändert, daß bei Zugriffsproblemen nicht mehr die Ausnahme `IOException`, sondern `FileNotFoundException` ausgelöst wird. Gründe für eine der beiden Ausnahmen können sein, daß eine nicht vorhandene Datei zum Lesen geöffnet werden soll, daß der Dateiname ein Verzeichnis bezeichnet oder daß keine ausreichenden Zugriffsrechte auf die Datei zur Verfügung stehen. |  |
JDK1.1-1.4

|  |  |  | Leider gibt es in der Klasse `RandomAccessFile` keine explizite Differenzierung zwischen dem Öffnen einer Datei zum Schreiben und dem Neuanlegen. Hier gilt die implizite Regel, daß eine Datei neu angelegt wird, wenn sie beim Öffnen im Modus "w" nicht vorhanden ist. Existiert sie dagegen, wird sie unverändert geöffnet, und es gibt keine Möglichkeit, ihren Inhalt zu löschen oder die Dateilänge auf einen bestimmten Wert zu setzen. Glücklicherweise bietet die Klasse `File` mit der Methode `delete` die Möglichkeit, eine Datei zu löschen und so das Neuanlegen über einen kleinen Umweg doch zu erreichen. |  |
Warnung

Das Schließen einer Random-Access-Datei erfolgt wie bei Streams durch Aufruf der parameterlosen Methode `close`. Diese leert zunächst alle internen Puffer und ruft dann die entsprechende Betriebssystemfunktion zum Schließen der Datei auf.

Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0
<< | < | > | >> | API | © 1998-2002 Guido Krüger, http://www.javabuch.de