Bom dia Pessoal! Havia postado ontem uma dúvia sobre como Projetar
um eficiente tratamento de exceções. O grupo me ajudou bastante; no
entanto, pintaram outras dúvidas, as quais não encontrei em nenhum
artigo ou tutorial.
O método createNewFile( ) da classe File pode lançar a exceção
tratada IOException. Como posso, baseado numa lógica, saber que um
método de uma determinda classe lança ou não uma exceção tratada?
Por que createNewFile pode lançar um IOException enquanto o delete()
não pode? Qual a lógica por trás disso?
O compilador me permitiria apagar um arquivo que não existisse?
Saudações e obrigado,
Bruno Giminiani
Lógica por trás das exceções
4 Respostas
Jovem,
Casa método de uma classe dispara um exception correspondente ao tipo de ação que está sendo executada. Você pode também em sua Lógica criar exceptions personalizadas…
Ok! Mas o delete() não deveria lançar alguma exceção que sinalizasse a exclusão de um arquivo inexistente? Por que o createNewFile() lança IOException e o delete() não? Gostaria de entender a lógica por trás disso. Não vou deixar de consultar o javadoc, mas gostaria de não ficar tão surpreso ao consultar, como aconteceu com o delete().
Entendo que este feeling vem com o tempo, mas haveria alguma lógica a já ser treinada.
Saudações e obrigado,
Bruno Giminiani.
Eu não me recordo se ele lança, mas para isso você pode usar o método da classe
boolean exists = (new File(“c:\nome”).exists();
if(exists){
File arq = new File(“c:\nome”);
arq.delete();
}
Vc quer dizer “exceção verificada”
Para saber se um método lança uma exceção verificada o compilador o avisará quando vc não a tratar.
Para saber antes vc pode consultar o Javadoc da classe , i.e. a documentação da classe.
delete retorna um boleano dizendo se consegui ou não apagar o arquivo. Ele lança um SecurityException
se não tiver permissão para o apagar. Mas se ele tiver essa permissão 3 coisas podem acontecer
- o arquivo é apagado : ok, retorna true e não ha exceção
- o arquvio não existe : ok, ele é considerado apagado : retorna true e não ha exceção
- não é possivel apagar o arquivo. retorna false e pronto. Não ha exceção.
Exceção só acontece quando o método não pode resolver alguma situação. O método delete consegue resolver todas ( exceto falata de permissão) logo ele só precisa lançar exceções relacionadas ao que não pode tratar ( ou seja, questões de segurança).
Fora isso ele consegur tratar tudo, logo não ha necessidade de uma IOException.
O método createNewFile não consegue resolver todas as situações : as execções de segurança continuam, mas agora existem situações que podem acontecer além disso. Por exemplo, não ser capaz de criar o arquivo por uma falha no disco ou no OS.