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!


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


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.


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.