Try/catch e loop for

Pessoal, estava programando aqui e surgiu uma dúvida…

Estou pegando todos os arquivos de um diretório e colocando em um vetor. Preciso ler todos os arquivos, mas estou com dúvida quanto ao método… O que é melhor?! Porque?!

  1. colocar o loop dentro do bloco try/catch
  2. colocar o bloco try/catch dentro do loop

???

File[] arquivos = diretorio.listFiles();
//lendo de todos os arquivos encontrados...
for(int i = 0; i < arquivos.length; i++){
	try{
		BufferedREader bReader = new BufferedReader(new FileReader(arquivos[i]));
		//ler do arquivo....
	}
	catch(Exception e){
	
	}
}

ou fazer

File[] arquivos = diretorio.listFiles();
//lendo de todos os arquivos encontrados...
try{
	for(int i = 0; i < arquivos.length; i++){
		BufferedREader bReader = new BufferedReader(new FileReader(arquivos[i]));
		//ler do arquivo....
	}
}
catch(Exception e){

}

??

Muito obrigado!

Fica mais organizado se colocar o try / catch fora do for e se possível que ele envolva a maior parte do escopo de codigo possivel. Como se trata de uma exception, até mesmo no caso de vc nesse loop listar os arquivos pode ser que ele nao encontre alguns deles na lista, caso alguma ação externa apague os arquivos listados.

=)

Ja eu acredito que fica melhor colocar o try dentro do for, assim vc pode tratar as exeptions de arquivo por arquivo, e nao perder o resto da lista de arquivos.
Mas depende mesmo do resto da sua aplicacao… se vc quer que quando der alguma exeption o programa nao trate o resto da lista, entao fica melhor colocar o try fora do for…

Tem gente que diz que, por razões de desempenho, é melhor pôr o try/catch fora do “for”. Mas obviamente isso depende da sua lógica - e de qualquer maneira seu problema (listar arquivos) não vai ser grandemente afetado pelo custo de montar um “try/catch”.

Obrigado pelas respostas!

Bom…é aquele negócio né…fora do bloco for…acho que existe ganho de performance…ele não fica invocando o try catch sempre a cada interação…o try já está ali envocado…se tiver alguma excessão ele ira tratar…
mas tem aquele detalhe…se acontecer uma excessão o bloco for é encerrado…e vai para para o catch…e você perde seu laço…entende? a qualquer momento que tiver uma exception…o seu for vai parar e não vai ter recuperação…se for essa idéia o try catch fora é o melhor mesmo!