Während java.io.RandomAccessFile
hat eine close()
Methode java.io.File
nicht. Warum ist das so? Wird die Datei beim Abschluss automatisch geschlossen oder so?
Vielen Dank!
Während java.io.RandomAccessFile
hat eine close()
Methode java.io.File
nicht. Warum ist das so? Wird die Datei beim Abschluss automatisch geschlossen oder so?
Vielen Dank!
Antworten:
Das Javadoc der File
Klasse beschreibt die Klasse als:
Eine abstrakte Darstellung von Datei- und Verzeichnispfadnamen.
File
ist nur eine Darstellung eines Pfadnamens, mit einigen Methoden bezüglich des Dateisystems (wie exists()
) und der Verzeichnisbehandlung, aber die eigentliche Streaming-Eingabe und -Ausgabe erfolgt an anderer Stelle. Streams können geöffnet und geschlossen werden, Dateien nicht.
(Meine persönliche Meinung ist, dass es ziemlich bedauerlich ist, dass Sun dann kreierte RandomAccessFile
, was viel Verwirrung mit seiner inkonsistenten Benennung verursachte.)
java.io.File
stellt keine geöffnete Datei dar, sondern einen Pfad im Dateisystem. Daher close
macht es keinen Sinn , eine Methode darauf zu haben.
Eigentlich wurde diese Klasse von den Bibliotheksautoren falsch benannt, sie sollte so etwas wie heißen Path
.
Path
vollständig von den getrennt werden sollen .
Im Wesentlichen wickelt eine Datei mit wahlfreiem Zugriff Eingabe- und Ausgabestreams ein, um den wahlfreien Zugriff zu verwalten. Sie öffnen und schließen keine Datei, Sie öffnen und schließen Streams zu einer Datei.
Ein BufferedReader kann geöffnet und geschlossen werden, eine Datei wird jedoch nie geöffnet. Sie stellt lediglich einen Pfad im Dateisystem dar.
Angenommen, Sie haben
File f = new File("SomeFile");
f.length();
Sie müssen das nicht schließen File
s , da es nur die Darstellung eines Pfades ist.
Sie sollten immer in Betracht ziehen, nur Leser / Schreiber und tatsächlich Streams zu schließen.