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

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 sequenziell 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 sequenziellen 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, dass bei Zugriffsproblemen nicht mehr die Ausnahme IOException, sondern FileNotFoundException ausgelöst wird. Gründe für eine der beiden Ausnahmen können sein, dass eine nicht vorhandene Datei zum Lesen geöffnet werden soll, dass der Dateiname ein Verzeichnis bezeichnet oder dass keine ausreichenden Zugriffsrechte auf die Datei zur Verfügung stehen.

 JDK1.1-6.0 

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, dass 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, 5. Auflage, Addison Wesley, Version 5.0.2
 <<    <     >    >>   API  © 1998, 2007 Guido Krüger & Thomas Stark, http://www.javabuch.de