You are on page 1of 5

Noter et modifier des scores

On s'interesse à noter dans un fichier une suite de scores sous la forme d'un suite de lignes ; chaque ligne contient un nom et un entier ; l'entier représente un score obtenu par la personne dont le nom est indiqué. On aura par exemple :
irene 12 olivier 8 david 19

Il s'agit de réaliser un programme qui permette de prendre à partir de l'entrée standard des lignes constituées d'un nom et d'un score pour actualiser le fichier.
 

Si le nom n'existait pas, une nouvelle ligne est créée pour mettre ce nouveau nom et son score. Si le nom existait déjà, le score est actualisé.

Dans une même exécution du programme, l'utilisateur pourra entrer successivement plusieurs lignes comportant chacune nom et score. Il terminera en retournant une ligne blanche. Après chaque ajout ou modification de score, le fichier sera actualisé et son contenu sera affiché. L'utilisateur indiquera sur la ligne de commande le nom du fichier utilisé. Si le fichier n'existait pas, il sera alors créé. On conseille de créer une classe, nommée par exemple Joueur contenant deux attributs : un pour un nom (chaîne de caractères), un pour un score(entier) et d'écrire dans le fichier directement les instances de Joueur, comme desObject(s) ; bien entendu, on lira alors dans le fichier des Object(s). Dans ce cas, on ne pourra pas lire le fichier directement, visuellement, en l'ouvrant.
CORRIGE : import java.io.*; import java.util.*;

class Joueur implements Serializable{ int score; String nom;

try { nom = st.nom = nom.out.Joueur(String nomEtScore) { // nomEtScore contient le nom. score = Integer.println("ligne non conforme"). des espaces et le score StringTokenizer st = new StringTokenizer(nomEtScore). . } } class Enregistreur { File fichier. int score) { this. this. } catch(Exception exc) { System. } } Joueur(String nom.nextToken()).score = score.nextToken().parseInt(st.

ObjectOutputStream sortie = null. try { entree = new ObjectInputStream (new FileInputStream(fichier)). ObjectInputStream entree = null. trouve = true. } void ecrire(Joueur nouveau) throws Exception { Joueur nj. while (true) { if (nouveau.txt"). File temporaire = new File("temp.writeObject(nouveau). sortie = new ObjectOutputStream(new FileOutputStream(temporaire)). } . boolean trouve = false.equals(nj.Enregistreur(String nomFichier) { fichier = new File(nomFichier).readObject().nom)) { sortie.nom. nj=(Joueur) entree.

try { nj=(Joueur)entree.else sortie. nj=(Joueur)entree. while (nj != null) { System.close().readObject(). } void lire() throws Exception { int a. . System.close().delete(). } } catch(FileNotFoundException exc) {} catch (EOFException exc) { entree.score).nom + ".println("contenu du fichier"). nj=(Joueur)entree. score : " + nj. } if (!trouve) sortie. fichier.writeObject(nouveau). Joueur nj. sortie.writeObject(nj).readObject().println("noms : " + nj.readObject(). temporaire. ObjectInputStream entree= new ObjectInputStream(new FileInputStream(fichier)).out.renameTo(fichier).out.

while(ligne.in)).length() != 0) { enregistreur.close().println().lire().out. ligne = entree. } } } .readLine().readLine(). BufferedReader entree = new BufferedReader (new InputStreamReader(System.} } catch (EOFException exc) { entree. } System. enregistreur.ecrire(new Joueur(ligne)). } public static void main(String[] arg) throws Exception { Enregistreur enregistreur = new Enregistreur(arg[0]). ligne = entree. String ligne.