erreur lors de la saisie clavier avec un scanner
Bonjour à tous,
J'apprends JAVA et je cherche à tester les flux IO pour la saisie clavier, lecture écriture dans fichier...
Je suis sous éclipse.
Je fais un "systeme de gestion d'adhérent" (extrêment simplifié)
Mon main commencer par vérifier si il y a déjà un fichier d'annuaire d'adhérents, si il n'est pas présent, il le crée.
ça, ça fonctionne.
ensuite, je crée un adhérent. Donc je demande le nom, prenom, profession.
J'ai cette erreur au moment de la demande du nom.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Bonjour, bienvenue dans le système de gestion d'abonnés
Aucun annuaire n'a été trouvé
Veuillez entrer un nom pour votre annuaire d'adhérants :
toto
L'annuaire toto est constitué de 0 adhérants
Création d'un adhérant :
Entrez le nom de l'adhérant
java.util.NoSuchElementException: No line found
L'adhérant a été crée :
nom=, prenom=, profession=
L'adhérant a été ajouté à l'annuaire
at java.util.Scanner.nextLine(Scanner.java:1540)
at Main.main(Main.java:85) |
Et voici la partie de mon main où je crée l'adhérent : (le main complet en dessous si besoin)
J'avais utilisé au départ un inputstream... mais ça faisait pareil, donc j'ai testé le scanner... je ne vois pas ce qui ne fonctionne pas.
Code:
1 2
| BufferedReader flux2 = new BufferedReader(
new InputStreamReader(System.in)); |
Merci de vos conseils...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
// *****************************************
// annuaire rechargé ou nouveau crée
System.out.println("\n\n\n");
// création du flux de lecture
/*
* BufferedReader flux2 = new BufferedReader( new
* InputStreamReader(System.in));
*/
String nom="", prenom="", profession="";
try {
Scanner sc = new Scanner(System.in);
// récupération des infos de l'adhérent
System.out.println("Création d'un adhérant :");
System.out.println("Entrez le nom de l'adhérant");
nom = sc.nextLine();
System.out.println("Entrez le prénom de l'adhérant");
prenom = sc.nextLine();
System.out.println("Entrez la profession de l'adhérant");
profession = sc.nextLine();
sc.close();
}
catch (NoSuchElementException e){
e.printStackTrace();
}
// création de l'adhérant
Adherant adh = new Adherant(nom, prenom, profession);
System.out.println("L'adhérant a été crée :");
System.out.println(adh);
annuaire.addAdherant(adh);
System.out.println("L'adhérant a été ajouté à l'annuaire");
} |
le main complet :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
| import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
// ***************************************************************
// Démarrage - verification de la présence d'un annuaire enregistré ou
// création
System.out.println("Bonjour, bienvenue dans le système de gestion d'abonnés");
// Lecture du fichier annuaire si il existe
// création du flux en dehors du try
ObjectInputStream ois = null;
AnnuaireAdherants annuaire = null;
try {
ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("annuaire.dat"))));
annuaire = (AnnuaireAdherants) ois.readObject();
ois.close();
}
catch (FileNotFoundException e) {
// cette exception se déclenche si le fichier n'a pas été trouvé,
// donc si c'est la première fois. Il faut donc créer un annuaire
try {
// création du lecteur
InputStreamReader lecteur = new InputStreamReader(System.in);
// création du flux d'entrée
BufferedReader flux = new BufferedReader(lecteur);
String nom;
// Interrogation
System.out.println(
"Aucun annuaire n'a été trouvé \nVeuillez entrer un nom pour votre annuaire d'adhérants :");
nom = flux.readLine();
flux.close();
annuaire = new AnnuaireAdherants(nom);
// SauvegardeAnnuaire.sauvegarderAnnuaire(annuaire);
} catch (IOException e2) {
e2.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("\n\n");
System.out.println(annuaire);
// *****************************************
// annuaire rechargé ou nouveau crée
System.out.println("\n\n\n");
// création du flux de lecture
/*
* BufferedReader flux2 = new BufferedReader( new
* InputStreamReader(System.in));
*/
String nom="", prenom="", profession="";
try {
Scanner sc = new Scanner(System.in);
// récupération des infos de l'adhérent
System.out.println("Création d'un adhérant :");
System.out.println("Entrez le nom de l'adhérant");
nom = sc.nextLine();
System.out.println("Entrez le prénom de l'adhérant");
prenom = sc.nextLine();
System.out.println("Entrez la profession de l'adhérant");
profession = sc.nextLine();
sc.close();
}
catch (NoSuchElementException e){
e.printStackTrace();
}
// création de l'adhérant
Adherant adh = new Adherant(nom, prenom, profession);
System.out.println("L'adhérant a été crée :");
System.out.println(adh);
annuaire.addAdherant(adh);
System.out.println("L'adhérant a été ajouté à l'annuaire");
}
} |
Précision : ça ne se produit que si il n'y avait pas d'annuaire (donc de fichier) de sauvegarde...
Si il y a déjà un annuaire existant (donc à partir de la deuxième fois), il n'y a plus de problème...
C'est lié au InputStreamReader lecteur = new InputStreamReader(System.in); précédent
C'est la conséquence, à priori, du
InputStreamReader lecteur = new InputStreamReader(System.in);
qui est lancé avant ... mais je ne vois pas pourquoi... est-ce que je ne l'ai pas fermé correctement... ou un truc du genre...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
try {
// création du lecteur
InputStreamReader lecteur = new InputStreamReader(System.in);
// création du flux d'entrée
BufferedReader flux = new BufferedReader(lecteur);
String nom;
// Interrogation
System.out.println(
"Aucun annuaire n'a été trouvé \nVeuillez entrer un nom pour votre annuaire d'adhérants :");
nom = flux.readLine();
annuaire = new AnnuaireAdherants("nom");
// SauvegardeAnnuaire.sauvegarderAnnuaire(annuaire);
} catch (IOException e2) {
e2.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
finally {
flux.close();
lecteur.close();
}
System.out.println("\n\n");
System.out.println(annuaire);
// *****************************************
// annuaire rechargé ou nouveau crée
System.out.println("\n\n\n");
// création du flux de lecture
/*
* BufferedReader flux2 = new BufferedReader( new
* InputStreamReader(System.in));
*/
String nom = "", prenom = "", profession = "";
try {
Scanner sc = new Scanner(System.in);
// récupération des infos de l'adhérent
System.out.println("Création d'un adhérant :");
System.out.println("Entrez le nom de l'adhérant");
nom = sc.nextLine();
System.out.println("Entrez le prénom de l'adhérant");
prenom = sc.nextLine();
System.out.println("Entrez la profession de l'adhérant");
profession = sc.nextLine();
// création de l'adhérant
Adherant adh = new Adherant(nom, prenom, profession);
System.out.println("L'adhérant a été crée :");
System.out.println(adh);
annuaire.addAdherant(adh);
System.out.println("L'adhérant a été ajouté à l'annuaire");
sc.close();
} catch (NoSuchElementException e) {
e.printStackTrace();
}
System.out.println(annuaire.toString());
// SauvegardeAnnuaire.sauvegarderAnnuaire(annuaire);
}
} |