Warum hat java.io.File keine close () -Methode?


123

Während java.io.RandomAccessFilehat eine close()Methode java.io.Filenicht. Warum ist das so? Wird die Datei beim Abschluss automatisch geschlossen oder so?

Vielen Dank!


3
Wenn Sie sich die Java-API ansehen, können Sie die Antwort sofort erhalten.
Gigadot

43
Ich habe gelernt, dass Leute hilfreicher sind als die ansonsten hervorragende Java-Spezifikation.
Albus Dumbledore

6
b / c es kann nicht geöffnet werden :)
bestsss

6
Weil es nichts öffnet. Und die Leute sind wesentlich weniger zuverlässig als die offizielle Java-Spezifikation.
Marquis von Lorne

Antworten:


141

Das Javadoc der FileKlasse beschreibt die Klasse als:

Eine abstrakte Darstellung von Datei- und Verzeichnispfadnamen.

Fileist 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.)


72

java.io.Filestellt keine geöffnete Datei dar, sondern einen Pfad im Dateisystem. Daher closemacht 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.


Aber was ist dann mit allen Verzeichnislistenmethoden? Sie hätten Pathvollständig von den getrennt werden sollen .
Biziclop

3
Einverstanden, aber in jedem Fall wird entweder File oder RandomAccessFile falsch benannt. So etwas wie RandomAccessFileStream könnte besser sein, aber jetzt ist es viele Jahre zu spät.
Maaartinus

7
"Eigentlich wurde diese Klasse von den Bibliotheksautoren falsch benannt, sie sollte so etwas wie Pfad heißen" -> Sie haben dich gehört. Im nio-Paket (New I / O) heißt die ähnliche Klasse jetzt Path. docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
Minuten

6

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.


1
Ja. Ich habe nie viel in java.io.RandomAccessFile geschaut. Ich habe immer angenommen, dass es java.io.File überschreibt, aber nicht!. Datei repräsentiert einen Pfad. RandomAccessFile ist ein Objekt, das Festplatten-E / A ausführen kann, da Streams, wenn auch mit einer ganz anderen Implementierung, zufälligen und nicht gestreamten Zugriff ermöglichen können.
Steve Cohen

6

Ein BufferedReader kann geöffnet und geschlossen werden, eine Datei wird jedoch nie geöffnet. Sie stellt lediglich einen Pfad im Dateisystem dar.


4

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.