Waarom heeft java.io.File geen sluitmethode?

Terwijl java.io.RandomAccessFileeen close()-methode heeft, heeft java.io.Filedat niet. Waarom is dat? Wordt het bestand automatisch gesloten bij afronding of zo?


Antwoord 1, autoriteit 100%

De javadoc van de klasse Filebeschrijft de klasse als:

Een abstracte weergave van bestands- en directorypadnamen.

Fileis slechts een weergave van een padnaam, met een paar methoden met betrekking tot het bestandssysteem (zoals exists()) en directoryverwerking, maar de feitelijke invoer en uitvoer van streaming wordt gedaan ergens anders. Streams kunnen worden geopend en gesloten, bestanden niet.

(Mijn persoonlijke mening is dat het nogal jammer is dat Sun vervolgens RandomAccessFileaanmaakte, wat veel verwarring veroorzaakte met zijn inconsistente naamgeving.)


Antwoord 2, autoriteit 51%

java.io.Filevertegenwoordigt geen openbestand, het vertegenwoordigt een pad in het bestandssysteem. Daarom heeft het geen zin om de methode closeerop te zetten.

Eigenlijk is deze klasse verkeerd genoemd door de bibliotheekauteurs, het zou zoiets als Pathmoeten heten.


Antwoord 3, autoriteit 4%

In wezen willekeurig toegankelijke bestanden omhullen invoer- en uitvoerstromen om de willekeurige toegang te beheren. Je opent en sluit geen bestand, je opent en sluit streams naar een bestand.


Antwoord 4, autoriteit 4%

Een BufferedReader kan worden geopend en gesloten, maar een bestand wordt nooit geopend, het vertegenwoordigt slechts een pad in het bestandssysteem.


Antwoord 5, autoriteit 3%

Stel, stel dat je

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

U hoeft de File‘s niet te sluiten, omdat dit slechts de weergave van een pad is.

Je moet altijd overwegen om alleen lezers/schrijvers en in feite streams te sluiten.

Other episodes