Enquanto java.io.RandomAccessFile
tem um close()
método java.io.File
não. Por que é que? O arquivo é fechado automaticamente na finalização ou algo assim?
Obrigado!
Enquanto java.io.RandomAccessFile
tem um close()
método java.io.File
não. Por que é que? O arquivo é fechado automaticamente na finalização ou algo assim?
Obrigado!
Respostas:
O javadoc da File
classe 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.)
java.io.File
não representa um arquivo aberto , ele representa um caminho no sistema de arquivos. Portanto, ter close
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
.
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.
Um BufferedReader pode ser aberto e fechado, mas um Arquivo nunca é aberto, apenas representa um caminho no sistema de arquivos.
Digamos que você tenha
File f = new File("SomeFile");
f.length();
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.