try {
entrada = new FileInputStream(
arquivoDeEntrada);
saida = new FileOutputStream(
arquivoDeSaida);
} finally {
try {
entrada.close();
saida.close();
} catch(IOException e) {
// Não há o que fazer.
}
}
Se os streams
não são fechados, o sistema operacional hospedeiro não consegue liberar os recursos nativos. Este programador quer ser cuidadoso fechando os dois streams
. Então ele chama o método close
no bloco finally
. Mas se entrada.close
lança uma IOException
então saida.close
nunca será executado. Cada método close deve ser chamado no seu próprio bloco try/catch
. Além disso, se a criação do stream
entrada lançar uma exceção (porque o arquivo não foi encontrado) então saida
será null
e saida.close
irá lançar uma NullPointerException
.
try {
entrada = new FileInputStream(
arquivoDeEntrada);
saida = new FileOutputStream(
arquivoDeSaida);
} finally {
try {
if (entrada != null)
entrada.close();
} catch(IOException e) {
// Não há o que fazer.
}
try {
if (saida != null)
saida.close();
} catch(IOException e) {
// Não há o que fazer.
}
}