DEV Community

Fechando automaticamente um arquivo

  • Antes do JDK 7, os arquivos eram fechados explicitamente usando o método close(), uma prática comum em códigos existentes.

  • O JDK 7 introduziu o try-with-resources, que automatiza o fechamento de recursos, como fluxos de arquivo.

  • A principal vantagem do try-with-resources é prevenir vazamentos de memória e garantir que os recursos sejam liberados quando não são mais necessários.

  • A estrutura básica do try-with-resources é:
    try (especificação-recurso) {
    // usa o recurso
    }

  • A especificação-recurso declara e inicializa um recurso, que é fechado automaticamente ao final do bloco try.

  • Não é necessário chamar close() explicitamente, pois o recurso é gerenciado automaticamente.

  • O try-with-resources pode incluir cláusulas catch e finally.

  • Pode ser utilizado apenas com recursos que implementam a interface AutoCloseable, que inclui as classes de fluxo, como FileInputStream e FileOutputStream.

  • Um exemplo de implementação do try-with-resources é uma versão modificada do programa ShowFile.

Image description

  • No programa, o arquivo é aberto usando a instrução try-with-resources, onde um FileInputStream chamado fin é declarado.

  • A variável fin é local ao bloco try e é criada ao entrar nele.

  • Ao sair do bloco try, o arquivo associado a fin é fechado automaticamente, evitando a necessidade de chamar close() explicitamente.

  • Essa abordagem oferece a vantagem do gerenciamento automático de recursos, evitando o esquecimento do fechamento de arquivos.

  • O recurso declarado na instrução try é implicitamente final, não podendo ser redefinido após a criação.

  • O escopo do recurso é limitado ao bloco try-with-resources.

  • É possível gerenciar múltiplos recursos em uma única instrução try, separando cada especificação de recurso com ponto e vírgula.

  • Um exemplo é fornecido, mostrando como modificar o programa CopyFile para usar try-with-resources para gerenciar tanto fin quanto fout.

Image description

  • Vantagens do try-with-resources:

  • Recursos como arquivos são fechados automaticamente ao final do bloco try.

  • Código mais conciso e otimizado em comparação com a abordagem tradicional.

  • Tratamento de exceções:

  • Exceções durante o fechamento de recursos são suprimidas, mas não perdidas.

  • Ambas as exceções (original e de fechamento) podem ser acessadas através da lista de exceções suprimidas.

  • Importância do conhecimento da abordagem tradicional:

  • Necessário para manutenção de código legado que não usa try-with-resources.

  • Importante para trabalhar em ambientes que não suportam JDK 7 ou versões posteriores.

  • Conclusão:

  • try-with-resources é recomendado para gerenciamento otimizado e robusto de recursos.

  • Conhecimento da abordagem tradicional é essencial para programadores.

Top comments (0)