1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100130.html;106,k100130.html;107,k100132.html;108,k100136.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100130.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100130.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100132.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100136.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">Kapitel 20 - Random-Access-I/O
</table>
<hr>
<!-- Section -->
<a name="sectlevel2id020001"></a>
<h2>20.1 Grundlegende Operationen </h2>
<hr>
<ul>
<li><a href="k100131.html#sectlevel2id020001">20.1 Grundlegende Operationen</a>
</ul>
<hr>
<p>
Neben der stream-basierten Ein- und Ausgabe bietet die Java-Klassenbibliothek
auch die Möglichkeit des wahlfreien Zugriffs auf Dateien<a name="ixa101391"></a>.
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.
<p>
Für den Zugriff auf Random-Access-Dateien stellt das Paket <a href="index_j.html#ixb100189"><font color=#000080><tt>java.io</tt></font></a>
die Klasse <a name="ixa101392"><a href="index_r.html#ixb101016"><font color=#000080><tt>RandomAccessFile</tt></font></a></a>
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.
<p>
Die Klasse <a href="index_r.html#ixb101016"><font color=#000080><tt>RandomAccessFile</tt></font></a>
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.
<p>
Das Öffnen von Random-Access-Dateien erfolgt mit dem Konstruktor
der Klasse <a href="index_r.html#ixb101016"><font color=#000080><tt>RandomAccessFile</tt></font></a>,
der in zwei verschiedenen Varianten zur Verfügung steht:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public RandomAccessFile(File file, String mode)
throws IOException
public RandomAccessFile(String name, String mode)
throws FileNotFoundException
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/io/RandomAccessFile.html" onClick="this.href=getApiDoc('java.io.RandomAccessFile')"><font color="#660066" size=-1>java.io.RandomAccessFile</font></a></td>
</tr>
</table>
<p>
Bei der Übergabe des <a href="index_s.html#ixb100117"><font color=#000080><tt>String</tt></font></a>-Parameters
<font color="#000077"><tt>name</tt></font> wird die Datei mit diesem
Namen geöffnet und steht für nachfolgende Schreib- und Lesezugriffe
zur Verfügung. Bei der Übergabe eines <a href="index_f.html#ixb100973"><font color=#000080><tt>File</tt></font></a>-Objekts
wird die durch dieses Objekt spezifizierte Datei geöffnet (die
Klasse <a href="index_f.html#ixb100973"><font color=#000080><tt>File</tt></font></a>
wird in <a href="k100136.html#verzeichnisse">Kapitel 21</a> besprochen).
Der zweite Parameter <font color="#000077"><tt>mode</tt></font> 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.
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Während der Testphase des JDK 1.2 wurde die Deklaration der Konstruktoren
teilweise dahingehend geändert, dass bei Zugriffsproblemen nicht
mehr die Ausnahme <a name="ixa101393"><a href="index_i.html#ixb100709"><font color=#000080><tt>IOException</tt></font></a></a>,
sondern <a name="ixa101394"><a href="index_f.html#ixb100998"><font color=#000080><tt>FileNotFoundException</tt></font></a></a>
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 <i>Verzeichnis</i> bezeichnet
oder dass keine ausreichenden Zugriffsrechte auf die Datei zur Verfügung
stehen.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#FF9900">
<tr>
<td><font color="#FFFFFF"> JDK1.1-6.0 </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#FF9900"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100%>
<tr>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=1></td>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top width=1000>
<p>
Leider gibt es in der Klasse <a href="index_r.html#ixb101016"><font color=#000080><tt>RandomAccessFile</tt></font></a>
keine explizite Differenzierung zwischen dem <i>Öffnen einer
Datei zum Schreiben</i> und dem <i>Neuanlegen</i>. 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 <a href="index_f.html#ixb100973"><font color=#000080><tt>File</tt></font></a>
mit der Methode <a name="ixa101395"><a href="index_d.html#ixb100549"><font color=#000080><tt>delete</tt></font></a></a>
die Möglichkeit, eine Datei zu löschen und so das Neuanlegen
über einen kleinen Umweg doch zu erreichen.</td>
<td><img src="trp1_1.gif" width=2></td>
<td valign=top>
<table border=0 cellspacing=0 cellpadding=1 width=100% bgcolor="#CC0000">
<tr>
<td><font color="#FFFFFF"> Warnung </font></td>
</tr>
</table>
</td>
<td width=1 align=left valign=top bgcolor="#CC0000"><img src="trp1_1.gif"></td>
</tr>
</table>
<p>
Das Schließen einer Random-Access-Datei erfolgt wie bei Streams
durch Aufruf der parameterlosen Methode <a name="ixa101396"><a href="index_c.html#ixb100957"><font color=#000080><tt>close</tt></font></a></a>.
Diese leert zunächst alle internen Puffer und ruft dann die entsprechende
Betriebssystemfunktion zum Schließen der Datei auf.
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100130.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100130.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100132.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100136.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">© 1998, 2007 Guido Krüger & Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>
|