Por que java.io.File não possui um método close ()?

123

Enquanto java.io.RandomAccessFiletem um close()método java.io.Filenão. Por que é que? O arquivo é fechado automaticamente na finalização ou algo assim?

Obrigado!

Albus Dumbledore
fonte
3
Se você procurar na API Java, poderá obter a resposta imediatamente.
gigadot
43
Aprendi que as pessoas são mais úteis do que as excelentes especificações Java.
Albus Dumbledore
6
b / c não pode ser aberto :)
bestsss 20/01
6
Porque não abre nada. E as pessoas são consideravelmente menos confiáveis ​​do que a especificação oficial de Java.
Marquês de Lorne

Respostas:

141

O javadoc da Fileclasse descreve a classe como:

Uma representação abstrata de nomes de caminho de arquivos e diretórios.

Fileé apenas uma representação de um nome de caminho, com alguns métodos relacionados ao sistema de arquivos (como exists()) e ao manuseio de diretório, mas a entrada e saída reais de streaming são feitas em outros lugares. Os fluxos podem ser abertos e fechados, os arquivos não.

(Minha opinião pessoal é que é bastante lamentável que a Sun tenha criado RandomAccessFile, causando muita confusão com seu nome inconsistente.)

biziclop
fonte
72

java.io.Filenão representa um arquivo aberto , ele representa um caminho no sistema de arquivos. Portanto, ter closemétodo nele não faz sentido.

Na verdade, essa classe foi mal identificada pelos autores da biblioteca, deveria ser chamada de algo como Path.

axtavt
fonte
Mas e todos os métodos de listagem de diretório? Eles deveriam ter sido separados Pathcompletamente.
biziclop
3
Concordou, mas em qualquer caso, File ou RandomAccessFile está nomeado incorretamente. Algo como RandomAccessFileStream poderia ser melhor, mas já é muitos anos tarde demais.
Maaartinus
7
"Na verdade, essa classe foi mal identificada pelos autores da biblioteca, deveria ser chamada de Path" -> Eles ouviram você. No pacote nio (New I / O), a classe semelhante agora é chamada de Path. docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
minutos
6

O arquivo de acesso aleatório basicamente agrupa os fluxos de entrada e saída para gerenciar o acesso aleatório. Você não abre e fecha um arquivo, abre e fecha fluxos para um arquivo.

Speck
fonte
1
Sim. Eu nunca procurei muito em java.io.RandomAccessFile. Eu sempre assumi que ele substituiu java.io.File, mas não! O arquivo representa um caminho. RandomAccessFile é um objeto que pode executar E / S de disco, como os fluxos, embora com uma implementação muito diferente, para permitir acesso aleatório em vez de transmitido.
Steve Cohen
6

Um BufferedReader pode ser aberto e fechado, mas um Arquivo nunca é aberto, apenas representa um caminho no sistema de arquivos.

Saher Ahwal
fonte
4

Digamos que você tenha

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

Você não precisa fechar os Files, porque é apenas a representação de um caminho.

Você deve sempre considerar fechar apenas leitores / gravadores e, de fato, fluxos.

Balaji Boggaram Ramanarayan
fonte