Donnerstag, 30. Juli 2009

File-I/O: RandomAccessFile

Ein Einfacher Weg, um ein File zu öffnen, um darin Werte zu lesen oder zu schreiben, ist ein RandomAccessFile.
die Klasse ist eigentlich selbsterklärend. Zusammengefasst tut sie folgendes:

Je nach dem, in welchem Modus eine Datei geöffnet wurde, kann man entweder Lese-, Schreibmethoden oder beides aufrufen. Für diese Operationen wird ein "filePointer" benutzt, der sozusagen als Schreib-/Lesekopf fungiert: Jede Operation führt den filePointer vorwärts an den bytes der Datei vorbei, und entweder werden die passierten bytes gelesen oder überschrieben.

Für die normalen Datentypen von Java ist das eine einfache Sache. Z.B. ist ein int eine 32-bit Zahl. readInt() und writeInt() bewegen also den filePointer jeweils um 4 bytes weiter. Bei Strings, und das ist der einzige andere Typ, den man mit RandomAccessFile bearbeiten kann, ist die Sache komplizierter. Strings haben keine fixe Länge, und für sie gibt es auch mehr Methoden:
readUTF()
writeUTF(String)
Diese Methoden sind ein echtes Paar: etwas, das man mit writeUTF geschrieben hat, kann man mit readUTF wieder eins zu eins auslesen. Aber:
readLine()
writeBytes(String)
writeChars(String)
Hier wird es ein Bisschen unübersichtlich. writeChars passt eigentlich gar nicht rein, weil Zeichen damit mit 2 bytes gespeichert werden, writeBytes (klarerweise) und auch readLine benutzen ein byte.
Die beiden Schreibmethoden können dabei beliebig viele Zeilen schreiben, weil ein String ja Zeilenumbrüche enthalten kann. außerdem wird das Geschriebene nicht mit einem Zeilenumbruch aufhören, wenn man nicht dafür sorgt. readLine dagegen wird auf leden Fall genau eine ganze Zeile lesen.
Insgesamt gesehen ist writeChars eigentlich fast nicht zu gebrauchen. writeBytes und readLine sollte man nur verwenden, wenn die Datei nur Text enthält. Ansonsten macht man sich damit nur Probleme.

Keine Kommentare:

Kommentar veröffentlichen