[java] base de données et enregistrement

base de données et enregistrement [java] - Java - Programmation

Marsh Posté le 26-05-2004 à 09:50:00    

Bonjour, je lis un fichier texte se composant de la façon suivante:
 
Posner oui stimulus
Stroop oui stimulus
Stroop oui stimulus
Prédic oui stimulus
Earth non globale
 
il s'agit en fait d'une base de données.
je souhaite lire pour chaque nom (1° champ) si le deuxième champ est oui ou non et afficher dans mon menu les noms et en fonction de la réponse du deuxième champ (oui ou non) ouvrir une boite de dialogue...
je considère que chaque ligne est un enregistrement :
 

Code :
  1. public void lectureTest (JMenu menuTests)
  2. {
  3.   LireTests liste;
  4.  try{
  5.  entree = new ObjectInputStream (
  6.  new FileInputStream ("C:\\Documents and Settings\\Ju\\Mes documents\\Logiciels\\eclipse\\workspace\\Developpement\\increment1\\liste.txt" )); 
  7.   liste = (LireTests) entree.readObject();
  8. String valeurs[] = {liste.getNoms(),liste.getStim(),liste.getNorm()};
  9.  //while (valeurs != null) {   
  10.  System.out.println(liste.getNoms()); 
  11.  JMenuItem test = new JMenuItem (liste.getNoms());
  12.  menuTests.add(test);
  13.   //}
  14.  entree.close();
  15. }
  16.  catch (EOFException endOfFileException){
  17.  System.out.println("Erreur --" + endOfFileException.toString());
  18.   }
  19.  catch (ClassNotFoundException classNotFoundException){
  20.  System.out.println("Erreur --" + classNotFoundException.toString());
  21.   }
  22.  catch (IOException e) {
  23.  System.out.println("Erreur --" + e.toString());
  24.  }
  25. }
  26. public class LireTests implements Serializable {
  27. private String nom;
  28. private String stimulus;
  29. private String norme;
  30. public LireTests()
  31. {
  32.  this ("","","" );
  33. }
  34. public LireTests(String noms, String stim, String normes)
  35. {
  36.  setNoms(noms);
  37.  setStim(stim);
  38.  setNorm(normes);
  39. }
  40. public void setNoms (String noms)
  41. {
  42.  nom=noms;
  43. }
  44. public String getNoms()
  45. {
  46.  return nom;
  47. }
  48. public void setStim (String stim)
  49. {
  50.  stimulus=stim;
  51. }


 
j'ai cependant une erreur :
Erreur --java.io.StreamCorruptedException: invalid stream header

Reply

Marsh Posté le 26-05-2004 à 09:50:00   

Reply

Marsh Posté le 26-05-2004 à 10:02:33    

Euh ce n'est pas comme ca que l'on lis un fichier texte hein.
La tu essaye de lire un fichier texte en faisant comme si tu lisais un objet serialisé, ca n'a rien a voir...


Message édité par nerisson le 26-05-2004 à 10:02:54

---------------
Light is right
Reply

Marsh Posté le 26-05-2004 à 10:04:32    

je vois...j'ai oublié de préciser que je ss débutante
comment faire????

Reply

Marsh Posté le 26-05-2004 à 10:09:32    

Bah en commencant par une bonne lecture  :(  
http://java.sun.com/docs/books/tut [...] index.html
et plus précisement
http://java.sun.com/docs/books/tut [...] reams.html
 
En gros tu vas lire ton fichier ligne par ligne, décomposer les champs suivant ton séparateur de colonnes, et puis faire ton traitement en consequence.


---------------
Light is right
Reply

Marsh Posté le 26-05-2004 à 10:10:27    

ok merci bcp de m'avoir aiguillé, j'etais un peu perdue

Reply

Marsh Posté le 26-05-2004 à 10:14:01    

Mais bon, si tu ne comptes pas modifier des fichiers texte a la main tu peut tres bien utiliser la serialisation comme méthode de sauvegarde aussi  ;)


---------------
Light is right
Reply

Marsh Posté le 26-05-2004 à 10:17:28    

en fait mon application aura une option qui permettra a l'utilisateur de rajouter des noms de tests avec ces options...
que dois je fairE?????

Reply

Marsh Posté le 26-05-2004 à 10:22:52    

Bah comme tu veux  :)  
Tu as 2 solutions:
 - soit tu sauvegardes tes données dans un fichier texte, avec un format spécifique. L'avantage c'est que tu pourra lire et modifier ce fichier facilement. L'inconvenient c'est que tu as un peu plus travail a faire en Java pour lire et écrire ce fichier.
 - soit tu utilises la sérialisation Java. L'avantage c'est que c'est super simple a écrire en Java. L'inconvenient c'est tu ne pourra plus lire ni modifier ton fichier a la main, et que tu ne pourra non plus changer la définition des objets que tu as sérialiser


---------------
Light is right
Reply

Marsh Posté le 26-05-2004 à 10:24:46    

ju972 a écrit :

en fait mon application aura une option qui permettra a l'utilisateur de rajouter des noms de tests avec ces options...
que dois je fairE?????


c'est à dire ? tu veux rajouter des données dans ton fichier au même format ?

Reply

Marsh Posté le 26-05-2004 à 10:26:58    

oui exactement
un option e mon logiciel va permettre a l'utilisateur d'ajouter ou modifier un test donc changer ou ajouter des données

Reply

Marsh Posté le 26-05-2004 à 10:26:58   

Reply

Marsh Posté le 26-05-2004 à 10:31:45    

donc il faut juste que tu codes une méthode permettant de sauvegarder les données que tu as en mémoire.
 
Si tu lis les fichier dans un certain format, la logique voudrait que tu les recopies dans ce même format => oublie la sérialisation.
 
C'est où que tu bloques ? parce que l'écriture de fichier en java n'est pas très compliquée... Tu créées un FileWriter et tu fais des write() de chaine de caractère dessus ... http://java.sun.com/j2se/1.4.2/doc [...] riter.html


Message édité par benou le 26-05-2004 à 10:34:48
Reply

Marsh Posté le 26-05-2004 à 10:36:36    

Alors là du coup je suis complètement perdue...je ne sais plus quelle méthode utiliser
le problème n'ets pas de lire le fichier n'y meme d'afficher ce qu'il contient car au début j'avais seulement un parmaètre dans mon fichier: le nom et je l'affichais dans mon menu ett c'etait nickel, ce qui me perturbe c'est davoir maintenant 3 champs par ligne...
je te montre ce que j'avais fait avce juste le nom
[cpp]public void lireTest (JMenu menuTests){    
//   Attraper l'exception IOException
  try {  
     
//   Création d'une nouvelle classe FileReader appelée file et permet de lire la liste des tests
     FileReader file = new FileReader ("C:\\Documents and Settings\\Ju\\Mes documents\\Logiciels\\eclipse\\workspace\\Developpement\\increment1\\liste.txt" );    
//   Création d'un flux de caractères à tampon associé à l'objet FileReader  
     BufferedReader buff = new BufferedReader (file);    
     String line;  
     
//   Lecture du fichier ligne par ligne. Cette boucle se termine quand la méthode retourne la valeur null.
 
   while ((line = buff.readLine()) != null) {    
      System.out.println(line);    
      JMenuItem test = new JMenuItem (line);  
      menuTests.add(test);
      test.addActionListener(
        new ActionListener(){
         public void actionPerformed(ActionEvent e)
          {
           choixAnalyse();
          }
        }
       );
       
   }
   
//   Fermeture du fichier et du buffer.  
   buff.close();    
   file.close();    
   
   }
    catch (IOException e){    
//Erreur de lecture de fichier                    
    System.out.println("Erreur --" + e.toString());    
     }    
   }    
[\cpp]

Reply

Marsh Posté le 26-05-2004 à 10:37:01    

oups excuse moi j'ai merdé sur la balise de code

Reply

Marsh Posté le 26-05-2004 à 10:41:33    

Bah c'etait bien ce que tu vaait fait !  :)  
Mais maintenant ta variable line ne contient plus uniquement le nom mais tout la ligne de ton fichier. Il suffit de decomposer cette ligne en fonction de ton separateur


---------------
Light is right
Reply

Marsh Posté le 26-05-2004 à 10:42:50    

donc j'utilise le StringTokenizer????
et je pourrais récupérer le premier token pour travailler dessus et le deuxième token pour faire autre chose?
et est ce que je pourrais y ajouter des nouvelles lignes à cette liste???

Reply

Marsh Posté le 26-05-2004 à 10:45:56    

Oui StringTokenizer c'est bien


---------------
Light is right
Reply

Marsh Posté le 26-05-2004 à 10:47:18    

bien , je vais essayer, mais ce que je n'ai tjs pas compris c'est est ce que qd l'utilisateur voudra ajouter un nom, si avec cette méthode (sans utiliser les objets) je pourrais ajouter les 3 champs à la liste  
désolé si je comprends pas vite, mé je ss archie débutante

Reply

Marsh Posté le 26-05-2004 à 10:48:48    

Et bien commence a faire les méthodes pour lire ton fichier, aprés on verra l'écriture  :)


---------------
Light is right
Reply

Marsh Posté le 26-05-2004 à 10:49:20    

Ok merci beaucoup alors
je me lance  
merci merci

Reply

Marsh Posté le 26-05-2004 à 11:53:40    

ouais : la lecture et l'ecriture se font séparément. Exemple : quand tu utilises word tu ouvres ton document, tu fais des modifications, et ensuiite tu sauvegardes. Ben là c'est pareil.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed