Pourquoi est-ce que je reçois le type d’exception non géré IOException?

J’ai le code simple suivant:

import java.io.*; class IO { public static void main(Ssortingng[] args) { BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); Ssortingng userInput; while ((userInput = stdIn.readLine()) != null) { System.out.println(userInput); } } } 

Et je reçois le message d’erreur suivant:

 ---------- 1. ERROR in io.java (at line 10) while ((userInput = stdIn.readLine()) != null) { ^^^^^^^^^^^^^^^^ Unhandled exception type IOException ---------- 1 problem (1 error)roman@roman-laptop:~/work/java$ mcedit io.java 

Quelqu’un at-il des idées pourquoi? J’ai juste essayé de simplifier le code donné sur le site web de la sum ( ici ). Ai-je trop simplifié?

    Vous devriez append “lève IOException” à votre méthode principale:

    public static void main(Ssortingng[] args) throws IOException {

    Vous pouvez en savoir plus sur les exceptions vérifiées (spécifiques à Java) dans JLS .

    Java a une fonctionnalité appelée “exceptions vérifiées”. Cela signifie qu’il existe certains types d’exceptions, notamment celles qui sous-classent Exception mais pas RuntimeException, telles que si une méthode peut les lancer, elle doit les lister dans sa déclaration de projection, par exemple: void readData () lève IOException. IOException est l’un de ceux-là.

    Ainsi, lorsque vous appelez une méthode qui répertorie IOException dans sa déclaration de projections, vous devez la lister dans votre propre déclaration de projections ou l’attraper.

    La raison de la présence d’exceptions vérifiées est que, pour certains types d’exceptions, vous ne devez pas ignorer le fait qu’elles peuvent se produire, car leur réalisation est une situation assez courante, pas une erreur de programme. Le compilateur vous aide donc à ne pas oublier la possibilité d’une telle exception et vous oblige à la gérer d’une manière ou d’une autre.

    Cependant, toutes les classes d’exception vérifiées dans la bibliothèque standard Java ne relèvent pas de cette logique, mais c’est un sujet totalement différent.

    Réessayez avec cet extrait de code:

     import java.io.*; class IO { public static void main(Ssortingng[] args) { try { BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); Ssortingng userInput; while ((userInput = stdIn.readLine()) != null) { System.out.println(userInput); } } catch(IOException ie) { ie.printStackTrace(); } } } 

    Utiliser try-catch-finally est mieux que d’utiliser des throws . La recherche d’erreurs et le débogage sont plus faciles lorsque vous utilisez try-catch-finally .

    Lire une entrée au clavier est analogue au téléchargement de fichiers sur Internet. Le système java io ouvre les connexions avec la source de données à lire à l’aide de InputStream ou de Reader. Vous devez gérer une situation où la connexion peut être interrompue à l’aide d’IOExceptions.

    Si vous voulez savoir exactement ce que signifie travailler avec InputStreams et BufferedReader, cette vidéo la montre

    ajoutez “lève IOException” à votre méthode comme ceci:

     public static void main(Ssortingng args[]) throws IOException{ FileReader reader=new FileReader("db.properties"); Properties p=new Properties(); p.load(reader); }