summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100131.html
blob: 2201f7224183995757cfc2653928cf38c63d1225 (plain)
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">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100130.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100130.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100132.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100136.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</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&ouml;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&uuml;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&uuml;gung. Anders als bei der stream-orientierten Ein-/Ausgabe
kann dabei allerdings nur auf &#187;echte Dateien&#171; zugegriffen
werden; die Verwendung von Arrays oder Pipes als Dateiersatz wird
nicht unterst&uuml;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 &Ouml;ffnen vorhandener
Dateien zur Verf&uuml;gung. F&uuml;r den lesenden oder schreibenden
Zugriff auf die Datei gibt es &auml;hnliche Methoden wie bei der sequenziellen
Dateiverarbeitung. Zus&auml;tzlich kann der Satzzeiger wahlfrei positioniert
werden, und es ist m&ouml;glich, seine aktuelle Position abzufragen.

<p>
Das &Ouml;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&uuml;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 &Uuml;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&ouml;ffnet und steht f&uuml;r nachfolgende Schreib- und Lesezugriffe
zur Verf&uuml;gung. Bei der &Uuml;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&ouml;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 &#187;r&#171;
sein, um die Datei nur zum Lesen zu &ouml;ffnen, oder &#187;rw&#171;,
um sie zum Schreiben und zum Lesen zu &ouml;ffnen. Ein reiner Schreibmodus,
wie er beispielsweise unter UNIX m&ouml;glich w&auml;re, wird nicht
unterst&uuml;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&auml;hrend der Testphase des JDK 1.2 wurde die Deklaration der Konstruktoren
teilweise dahingehend ge&auml;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&ouml;st wird. Gr&uuml;nde f&uuml;r eine der beiden Ausnahmen
k&ouml;nnen sein, dass eine nicht vorhandene Datei zum Lesen ge&ouml;ffnet
werden soll, dass der Dateiname ein <i>Verzeichnis</i> bezeichnet
oder dass keine ausreichenden Zugriffsrechte auf die Datei zur Verf&uuml;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">&nbsp;JDK1.1-6.0&nbsp;</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>&Ouml;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 &Ouml;ffnen
im Modus &#187;w&#171; nicht vorhanden ist. Existiert sie dagegen,
wird sie unver&auml;ndert ge&ouml;ffnet, und es gibt keine M&ouml;glichkeit,
ihren Inhalt zu l&ouml;schen oder die Dateil&auml;nge auf einen bestimmten
Wert zu setzen. Gl&uuml;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&ouml;glichkeit, eine Datei zu l&ouml;schen und so das Neuanlegen
&uuml;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">&nbsp;Warnung&nbsp;</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&szlig;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&auml;chst alle internen Puffer und ruft dann die entsprechende
Betriebssystemfunktion zum Schlie&szlig;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">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</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">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100130.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100132.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100136.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>