FileInputStream fs = null;
try
{
fs = new FileInputStream("C:\Teste.java");
do
{
i = fs.read();
if (i != -1)
System.out.print((char) i);
} while (i != -1);
}
catch (IOException ex) {
System.out.println("Erro de I/O: " + ex);
}
// Esta instrução garante que o arquivo será fechado
finally
try
{
if (fs != null) fs.close();
}
catch (IOException ex) {
System.out.println("Erro ao fechar o arquivo.");
}
}
Agora vamos usar o recurso try-with-resources para executar automaticamente o fechamento do recurso (não se esqueça de adicionar import java.io.*;):
try (FileInputStream fs = new FileInputStream("C:\Teste.java"))
{
do {
i = fs.read();
if (i != -1)
System.out.print((char) i);
} while (i != -1);
}
catch (IOException ex) {
System.out.println("Erro de I/O: " + ex);
}
A diferença entre o tamanho dos códigos é clara. A forma geral de try-with-resources é:
try (especificação do recurso)
{
// usa o recurso
}
Agora, as regras para se usar try-with-resources:
- Só pode ser usado com recursos que implementam a interface AutoCloseable (definida em java.lang);
- O recurso declarado na instrução try é implicitamente final, isto é, ele não pode ser redefinido depois de criado;
- Instruções catch e finally podem ser usadas em conjunto com try-with-resources;
- A variável de recurso é local ao bloco try;
- Mais de um recurso pode ser inicializado na instrução try, bastando-se separá-las por ";" - ponto e vírgula.
Todas as classes de fluxo em Java, implementam as duas interfaces: AutoCloseable e Closeable (definida em java.io), logo, fornecem o método close().
Outra coisa importante a ser mencionada: exceções não são perdidas com try-with-resources. As exceções são suprimidas e podem ser obtidas utilizando-se o método getSupressed() de Throwable.
Se você estiver trabalhando com o JDK 7 ou superior, vai querer utilizar este novo recurso da linguagem!
Nenhum comentário:
Postar um comentário