Um arquivo é aberto para leitura criando um objeto
FileInputStream.O construtor
FileInputStream(String nomeArquivo)lançaFileNotFoundExceptionse o arquivo não existir.FileNotFoundExceptioné uma subclasse deIOException.Para ler um arquivo, usa-se o método
read(), que lê um byte e retorna um valor inteiro.read()retorna -1 quando o fim do arquivo é alcançado e lançaIOExceptionem caso de erro.Após o uso, o arquivo deve ser fechado com o método
close()para liberar recursos do sistema.Não fechar o arquivo pode causar vazamentos de memória.
O programa de exemplo usa
read()para exibir o conteúdo de um arquivo e utiliza blocostry/catchpara tratar erros de I/O.Obs.: Em Java, um vazamento de memória ocorre quando o programa não libera recursos de memória que ele não está mais usando, mantendo esses recursos ocupados sem necessidade. Embora a linguagem tenha coleta automática de lixo (garbage collection) para objetos não referenciados, essa coleta não lida diretamente com recursos externos, como arquivos ou conexões de rede. Se você não fecha o arquivo, os recursos do sistema permanecem ocupado, tende-se o desempenho degradado e apresentação de erros e falhas (ao tentar abrir outro arquivo, por exemplo).
O exemplo anterior fecha o fluxo após o bloco try de leitura do arquivo.
Java permite uma abordagem alternativa: chamar
close()dentro de um blocofinally.Com o bloco
finally, o arquivo é fechado independentemente de como o blocotrytermine.Essa abordagem garante o fechamento do arquivo, mesmo que ocorra uma exceção.
O bloco try acessa o arquivo, e o finally é usado exclusivamente para fechá-lo.
A vantagem de usar o bloco finally é garantir o fechamento do arquivo, mesmo se uma exceção não relacionada a I/O ocorrer.
Embora não seja crítico em programas pequenos, essa abordagem é essencial em programas maiores para evitar problemas.
O uso de
finallyajuda a evitar o incômodo de lidar com arquivos não fechados em caso de exceções inesperadas.Encapsular a abertura e o acesso ao arquivo em um único bloco
trye usarfinallypara fechá-lo é uma prática recomendada.Essa abordagem pode simplificar o código e garantir a liberação dos recursos.
finé inicializada comonulle, no blocofinally, o arquivo só é fechado sefinnão fornull.Isso evita que
close()seja chamado se ocorrer uma exceção ao abrir o arquivo.A sequência try/catch pode ser simplificada, pois
FileNotFoundExceptioné uma subclasse deIOException.Capturar apenas
IOExceptionelimina a necessidade de capturarFileNotFoundExceptionseparadamente.Nesse caso, a mensagem de exceção padrão descreve o erro.
...
} catch(IOException exc) {
System.out.println("I/O Error: " + exc);
} finally {
...




Top comments (0)