FileReader readerAntigo = null;
try {
readerAntigo = new FileReader("arquivo.txt");
Scanner scanner = new Scanner(readerAntigo);
while(scanner.hasNext()) {
System.out.println(scanner.next());
}
} catch (FileNotFoundException e ) {
System.out.println("Arquivo não encontrado");
} finally {
try {
readerAntigo.close();
} catch (IOException e) {
System.out.println("Erro ao fechar o arquivo");
}
}
Perceba como é chato gerenciar o arquivo, para que eu possa abrir e fechar são necessário duas capturas de sessão, sem contar que ainda é necessário que o programador lembre-se de fechar o arquivo, algo que não pode ser tão crítico, mas se imaginarmos conexões JDBC, logo o banco começará a recusar conexões pois esquecemos de fecha-las anteriormente.Para ajudar a solucionar isso, no Java 7 foi introduzi o AutoCloseable, que permite que recursos existam apenas dentro de um bloco e ao seu final (ou caso seja lançado uma exceção) sejam fechados devidamente. Para isso, foi criada a interface AutoCloseable, e o a classe que a implementada de sobrescrever o método close(). Ao abrir um novo recurso, você deve declara-lo e instancia-lo dentro de parentes após o try, ficando assim:
try (ClasseAutoCloseable objeto = new ClasseAutoCloseable(...)) {
//Dentro deste escopo o objeto existirá
//ao final será chamado o método close() da interface AutoCloseable
} catch (Exception e ) {
//Caso tenha uma exception, também será dado o close()
}
Desta forma podemos eliminar em muito os blocos finally's que existem apenas para fechar recursos abertos, pois agora ele será fechado automaticamente.Nosso exemplo acima, que abre e exibe o arquivo, ficando bem inferior a quantidade de linhas e mais simples de ler:
try(FileReader reader = new FileReader("arquivo.txt")) {
Scanner scanner2 = new Scanner(reader);
scanner2.forEachRemaining(System.out::println); //Esse recurso surgiu no Java 8!
} catch(IOException e) {
System.out.println("Erro ao fechar o arquivo");
}
Essa abordagem já esta usada em linguagens como C#, e agora o Java também possui este recurso que facilita em muito a vida do desenvolvedor.
Nenhum comentário:
Postar um comentário