Mentre java.io.RandomAccessFile
ha un close()
metodo java.io.File
no. Perché? Il file viene chiuso automaticamente alla finalizzazione o qualcosa del genere?
Grazie!
Mentre java.io.RandomAccessFile
ha un close()
metodo java.io.File
no. Perché? Il file viene chiuso automaticamente alla finalizzazione o qualcosa del genere?
Grazie!
Risposte:
Il javadoc della File
classe 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.)
java.io.File
non rappresenta un file aperto , rappresenta un percorso nel filesystem. Quindi avere close
metodo su di esso non ha senso.
In realtà, questa classe è stata chiamata erroneamente dagli autori della libreria, dovrebbe essere chiamata qualcosa di simile Path
.
Path
completamente.
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.
Un BufferedReader può essere aperto e chiuso ma un File non viene mai aperto, rappresenta solo un percorso nel filesystem.
Supponi di averlo fatto
File f = new File("SomeFile");
f.length();
Non è necessario chiudere la File
s, perché è solo la rappresentazione di un percorso.
Dovresti sempre considerare di chiudere solo lettori / autori e in effetti flussi.