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!
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!
Respostas:
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.)
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.
Pathcompletamente.
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 Files, porque é apenas a representação de um caminho.
Você deve sempre considerar fechar apenas leitores / gravadores e, de fato, fluxos.