Comment utiliser des exceptions et la manipulation des exceptions pour que mon programme se poursuive, même si une exception se produit lors du traitement de certains fichiers dans un ensemble de fichiers? P>
Je veux que mon programme fonctionne bien pour des fichiers corrects pendant que ces fichiers entraînent une exception dans le programme, il devrait ignorer. P>
Cordialement, P>
Magggi P>
8 Réponses :
Vous devez utiliser l'essai / attraper / enfin Blocs.
for(File f : getFiles()){ //You might want to open a file and read it InputStream fis; //You might want to write into a file OutputStream fos; try{ handleFile(f); fis = new FileInputStream(f); fos = new FileOutputStream(f); } catch(IOException e){ //Handle exceptions due to bad IO } finally { //In fact you should do a try/catch for each close operation. //It was just too verbose to be put here. try{ //If you handle streams, don't forget to close them. fis.close(); fos.close(); }catch(IOException e){ //Handle the fact that close didn't work well. } } }
essayez code> vous permettra d'exécuter du code sensible qui pourrait lancer une exception. Li>
-
attrape code> gérera une exception particulière (ou tout sous-type de cette exception). LI>
-
enfin code> aidera à exécuter des déclarations même si une exception est lancée et non attrapée. li>
ul> dans votre cas p> xxx pré>
ressources: strong> p>
- Oracle.com - Leçon: Exceptions Li>
- JLS - Exceptions LI>
ul> p>
Je suis au courant de ça. Problème: 1.MY Application traite plusieurs fichiers. 2.L'an des fichiers peut échouer lors du traitement. (Exception) 3.Mais maintenant, mon application quitte Wen tout fichier échoue. 4.Je veux que ma candidature continue à exécuter d'autres fichiers. Comment puis-je structurer mon manutention d'exception?
Vous devriez mettre toutes vos manipulations d'exception dans votre boucle.
attrape juste l'exception, il peut jeter et ne rien faire avec elle; Mangez-le comme les gens disent :)
Mais au moins en connectez-le! try {
your code...
} catch (Exception e) {
log here
}
Je suppose que votre nouvelle programmation en tant que exécutions est un concept de fendeuses assez fendus, car les problèmes peuvent se produire hors de votre contrôle et vous devez y faire face.
La prémisse de base est un bloc de capture d'essai. P> < Pré> xxx pré>
vous "essayez" votre code et si une exception est soulevée, vous "attrapez". Et faites ce dont vous avez besoin. Il existe également un ajout au bloc de capture en ce que vous pouvez ajouter enfin {} en dessous. Fondamentalement, même si aucune exception n'est soulevée, le code enfin est toujours exécuté. Vous pouvez vous demander le point de ce fait, mais c'est souvent utilisé avec des flux / une manipulation de fichiers, etc. pour fermer le flux. P>
En savoir plus sur Java Exceptions ici dans des tutoriels écrits par Sun (Maintenant Oracle) - http://download.oracle.com/javase/tutorial/essential/exceptions/ < / p> La question que vous pouvez demander est de savoir comment attirer des exceptions différentes, c'est-à-dire une référence null, est-elle divisée par zéro, n'est-ce pas de fichier trouvé ni de fichier non écrit, etc. . Pour cela, vous écrivez plusieurs blocs de captures différentes sous l'essai, essentiellement une capture pour chaque type d'exception, l'utilisation de "exception" est essentiellement une prise de capture de toutes les instructions, et comme dans la pile de ces déclarations si une "exception" est la première Bloc de prise de capture Il va attraper tout, donc si vous avez plusieurs blocs de capture, assurez-vous que l'exception est la dernière. P> Encore une fois, il s'agit d'un sujet utile mais important afin que vous ayez besoin de lire à ce sujet. P> Puisque vous faites multipler e Fichiers, vous devez essentiellement faire une boucle et dans la boucle est contenue le bloc Essayer / Catch. P> Donc, même si un fichier échoue, vous l'attrapez, mais continuez à courir, le code va alors boucler. autour du fichier suivant sans entrave. p> p>
for(File f : files){ try { process(f); // may throw various exceptions } catch (Exception e) { logger.error(e.getMessage(), e); } }
+1 pour le message de journal significatif (y compris le nom du fichier). La plupart du code que je vois n'a que logger.info (e.getMessage ()) code>.
Il peut s'agir de mieux à ne pas attraper le type d'exception générale, mais plutôt des types d'exception spécifiques (IoException, ...).
Bien que dans la pratique, si vous ouvrez une connexion au fichier, vous souhaitez ajouter un bloc enfin dans lequel fermer la connexion selon la réponse Colins.
Y a-t-il une raison de ne pas avoirxé sur la cheminée? Je trouve que le message d'exception n'est souvent pas suffisant pour comprendre un problème et la reproduire.
@Thierry: Les traces de pile sont utiles pour résoudre des bugs dans le code; Cela m'a semblé comme la question était plus sur des choses telles que FilenotFoundException où la trace de la pile n'est pas utile.
Vous êtes correct.Mais avec cette logique, le programme quitterait après l'enregistrement de la mesure. * Mais que s'il y a encore plus de fichiers? * Je veux traiter les fichiers restants même après l'exception ..
@Magggi: um, non. Le bloc de capture gère l'exception et la boucle continue comme si rien n'était arrivé.
Typiquement, j'aurais fait cela.
Bien que, une meilleure idée pour les débutants consiste à attraper une exception et à imprimer en utilisant p>
où FileSystemException code> peut être l'exception spécifique que vous recherchez. P>
system.out.println (e); code> p>
E code> est l'exception capturée. p>
public class Main { public static void main(String args[]) { int a=10; try { System.out.println(a/0); //Here it is not possible in maths so it goes to catch block } catch(ArithmeticException e) { System.out.println("Arithmetic Exception"); } } } output:Arithmetic Exception
Exception en Java est une erreur d'exécution pouvant être traitée par le programme, le processus est appelé traitement des exceptions. La classe d'exception parent est lancée. Exception: L'exception est cette erreur d'exécution qui peut être traitée par programme. P>
Erreur: cette erreur d'exécution qui ne peut être traitée par le programme. P>
Outils utilisés pour manipuler une exception: P>
essayer Prise Enfin Jeter Jette p>
Plus P>