web-dev-qa-db-fra.com

Pourquoi ai-je le "type d'exception non gérée IOException"?

J'ai le code simple suivant:

import Java.io.*;
class IO {
    public static void main(String[] args) {    
       BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));    
       String 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 

Est-ce que quelqu'un a des idées pourquoi? Je viens d'essayer de simplifier le code donné sur le site web sum ( ici ). Ai-je trop simplifié?

29
Roman

Java possède 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 () lance 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 régulière, 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.

40
jkff

Réessayez avec cet extrait de code:

import Java.io.*;

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

Utiliser try-catch-finally est préférable à utiliser throws. La recherche d'erreurs et le débogage sont plus faciles lorsque vous utilisez try-catch-finally.

11
Parth

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

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

        FileReader reader=new FileReader("db.properties");

        Properties p=new Properties();
        p.load(reader);


    }
0
harun ugur

La lecture d'une entrée à partir du clavier est analogue à un téléchargement de fichiers depuis Internet. Le système Java io ouvre des 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

0
vivz