Gerando entradas em um arquivo

Java para Iniciantes (Oracle) - Nov 4 - - Dev Community
  • Um arquivo é aberto para leitura criando um objeto FileInputStream.

  • O construtor FileInputStream(String nomeArquivo) lança FileNotFoundException se o arquivo não existir.

  • FileNotFoundException é uma subclasse de IOException.

  • 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ça IOException em 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 blocos try/catch para 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).

Image description

Image description

  • 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 bloco finally.

  • Com o bloco finally, o arquivo é fechado independentemente de como o bloco try termine.

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

Image description

  • 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 finally ajuda 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 try e usar finally para fechá-lo é uma prática recomendada.

  • Essa abordagem pode simplificar o código e garantir a liberação dos recursos.

Image description

  • fin é inicializada como null e, no bloco finally, o arquivo só é fechado se fin não for null.

  • 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 de IOException.

  • Capturar apenas IOException elimina a necessidade de capturar FileNotFoundException separadamente.

  • Nesse caso, a mensagem de exceção padrão descreve o erro.

...
} catch(IOException exc) {
System.out.println("I/O Error: " + exc);
} finally {
...

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .