Le Scanner
documentation dit que lorsque l'on appelle next()
sur un flux fermé alors ces deux exceptions peuvent être jetés:L'appel suivant() sur un scanner initialisé par un flux fermé ne jette pas IllegalStateException
NoSuchElementException - si plus de jetons sont disponibles
IllegalStateException - si ce scanner est fermé
De plus hasNext()
peut jeter cette exception:
IllegalStateException - si ce scanner est fermé
Maintenant, nous allons supposer que nous avons ce code:
FileInputStream fis = new FileInputStream(new File("somefile"));
Scanner sc = new Scanner(fis);
// sc.close();
// sc = new Scanner(fis);
// somefile contents: word1 word2 word3
System.out.println(sc.next());
Ce imprimera word1
comme prévu. Si on décommente sc.close(); sc = new Scanner(fis);
un NoSuchElementException
sera levé quand sc.next()
sera exécuté.
Ce comportement me semble étrange. Il ne faut pas hasNext()
et next()
jeter un IllegalStateException
comme InputStream
est fermé? S'il vous plaît, expliquez pourquoi cela se passe.
Comme @Andreas dit, dans mon cas, il a jeté IllegalStateException: fermé Scanner. – wawek
Je ne suis pas sûr de ce que vous dites. 'sc.hasNext()' effectue une exception fermée dans ce code, elle ne renvoie pas false. – Zarwan
Vous avez raison, je me suis trompé. Je vais mettre à jour ma question un peu plus tard. –