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?
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.)
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.
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.
Respostas:
O javadoc da
File
classe descreve a classe como:File
é apenas uma representação de um nome de caminho, com alguns métodos relacionados ao sistema de arquivos (comoexists()
) 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.)fonte
java.io.File
não representa um arquivo aberto , ele representa um caminho no sistema de arquivos. Portanto, terclose
método nele não faz sentido.Na verdade, essa classe foi mal identificada pelos autores da biblioteca, deveria ser chamada de algo como
Path
.fonte
Path
completamente.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.
fonte
Um BufferedReader pode ser aberto e fechado, mas um Arquivo nunca é aberto, apenas representa um caminho no sistema de arquivos.
fonte
Digamos que você tenha
Você não precisa fechar os
File
s, porque é apenas a representação de um caminho.Você deve sempre considerar fechar apenas leitores / gravadores e, de fato, fluxos.
fonte