Perché java.io.File non ha un metodo close ()?


123

Mentre java.io.RandomAccessFileha un close()metodo java.io.Fileno. Perché? Il file viene chiuso automaticamente alla finalizzazione o qualcosa del genere?

Grazie!


3
Se esamini l'API Java, sarai in grado di ottenere immediatamente la risposta.
gigadot

43
Ho imparato che le persone sono più utili delle altrimenti superbe specifiche Java.
Albus Silente,

6
b / c non può essere aperto :)
bestsss

6
Perché non apre niente. E le persone sono notevolmente meno affidabili rispetto alle specifiche Java ufficiali.
Marchese di Lorne

Risposte:


141

Il javadoc della Fileclasse descrive la classe come:

Una rappresentazione astratta di nomi di percorso di file e directory.

Fileè solo una rappresentazione di un percorso, con alcuni metodi riguardanti il ​​filesystem (come exists()) e la gestione delle directory, ma l'input e l'output di streaming effettivi vengono eseguiti altrove. I flussi possono essere aperti e chiusi, i file no.

(La mia opinione personale è che è piuttosto sfortunato che Sun abbia poi continuato a creare RandomAccessFile, causando molta confusione con la sua denominazione incoerente.)


72

java.io.Filenon rappresenta un file aperto , rappresenta un percorso nel filesystem. Quindi avere closemetodo su di esso non ha senso.

In realtà, questa classe è stata chiamata erroneamente dagli autori della libreria, dovrebbe essere chiamata qualcosa di simile Path.


Ma allora per quanto riguarda tutti i metodi di elenco delle directory? Avrebbero dovuto essere separati dal Pathcompletamente.
biziclop

3
D'accordo, ma in ogni caso, File o RandomAccessFile sono denominati erroneamente. Qualcosa come RandomAccessFileStream potrebbe essere migliore, ma ormai è troppo tardi di molti anni.
maaartinus

7
"In realtà, questa classe è stata chiamata erroneamente dagli autori della biblioteca, dovrebbe essere chiamata qualcosa come Path" -> Ti hanno sentito. Nel pacchetto nio (New I / O), la classe simile è ora denominata Path. docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
mins

6

Essenzialmente, il file ad accesso casuale avvolge i flussi di input e output per gestire l'accesso casuale. Non apri e chiudi un file, apri e chiudi stream in un file.


1
Sì. Non ho mai esaminato molto java.io.RandomAccessFile. Ho sempre pensato che sovrascrisse java.io.File ma non lo fa !. Il file rappresenta un percorso. RandomAccessFile è un oggetto che può eseguire l'I / O del disco poiché i flussi possono, sebbene con un'implementazione molto diversa, consentire un accesso casuale anziché in streaming.
Steve Cohen

6

Un BufferedReader può essere aperto e chiuso ma un File non viene mai aperto, rappresenta solo un percorso nel filesystem.


4

Supponi di averlo fatto

File f  = new File("SomeFile");
f.length();

Non è necessario chiudere la Files, perché è solo la rappresentazione di un percorso.

Dovresti sempre considerare di chiudere solo lettori / autori e in effetti flussi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.