Ecriture de String ds un fichier, puis lecture et affichage ds une fen

Ecriture de String ds un fichier, puis lecture et affichage ds une fen - Java - Programmation

Marsh Posté le 13-06-2003 à 11:05:35    

Je fais une boucle qui écrit des String ds un fichier de la manière suivante :

Code :
  1. JTextField zelog = new JTextField(50);
  2.     try {
  3.       BufferedReader fichier = new BufferedReader(new FileReader(
  4.           "c:\\appelslogges.txt" ));
  5.       String ligne = new String();
  6.       do {
  7.         zelog.setText(ligne);
  8.       getContentPane().add(zelog);
  9.       }
  10.       while (ligne != null);
  11.     }
  12.     catch (Exception e) {System.out.println("Erreur : " + e.toString());}


le problème étant que ça me rajoute des caractères bizarres...
 
Mon deuxième problème est que j'aimerais lire et afficher le contenu de ce fichier ds une fenetre, et je ne vois pas trop comment faire...
 
Merci d'avance :)

Reply

Marsh Posté le 13-06-2003 à 11:05:35   

Reply

Marsh Posté le 13-06-2003 à 11:07:37    

Un TextField n'affiche qu'une ligne de texte. Voir la classe (J)TextArea.


---------------
Le site de ma maman
Reply

Marsh Posté le 13-06-2003 à 11:10:55    

exact, merci :) par contre, comment puis-je ajouter du texte dedans, comme je le fais (ds une boucle)... il faudrait une méthode du type addText(String)... mais je rêve un peu là :p

Reply

Marsh Posté le 13-06-2003 à 11:14:49    

sans compter que j'ai toujours les caractères bizarres, le setText ne doit pas etre bien pour ça

Reply

Marsh Posté le 13-06-2003 à 11:21:09    

Désolé mais ton programme est horrible.
Petite correction rapide mais on peux mieux faire.

Code :
  1. JTextArea zelog = new JTextArea(nb_col, nb_ligne);
  2. String line = "";
  3. try {
  4.      BufferedReader fichier = new BufferedReader(new FileReader(
  5.          "c:\\appelslogges.txt" ));
  6. while((line = fichier.readLine())!=null)
  7. {
  8. zelog.append(line+"\n" );
  9. }
  10. }catch (Exception e) {System.out.println("Erreur : " + e.toString());}
  11. getContentPane().add(zelog);

Reply

Marsh Posté le 13-06-2003 à 11:28:30    

Comment ça horrible ?  :whistle:  
 
Effectivement ça écrit bien dedans, mais en visualisant avec notepad, j'ai pas les retours à la ligne (normal ça) et avec word, j'ai des carrés entre chaque caractère.... Bon c pas bien grave si ils sont plus là à l'affichage dans le prog, qui faisait l'objet de ma seconde question ;)
Le mieux pour afficher un log comme ça ds une fenetre, c koi ? JTextArea, JPanel ? et comment faire, j'ai pas réussi :(

Reply

Marsh Posté le 13-06-2003 à 11:42:17    

line+"\r\n" au lieu de line+"\n";

Reply

Marsh Posté le 13-06-2003 à 11:43:34    

sinon tu peux combiner ton JTextArea à un JScrollPane pour avoir des barres de défilement si ton texte est supérieur au dimension de ton champ de texte.

Reply

Marsh Posté le 13-06-2003 à 11:45:43    

aaah vi bonne idée merci :jap:

Reply

Marsh Posté le 13-06-2003 à 11:46:27    

pour enlever mes caractères bizarres, pour l'instant je fais une fichier.writeChars(...), y'a mieux comme méthode ?

Reply

Marsh Posté le 13-06-2003 à 11:46:27   

Reply

Marsh Posté le 13-06-2003 à 11:49:11    

phnatomass a écrit :

line+"\r\n" au lieu de line+"\n";


 
 [:tapai]  
 
 
:non:  
 

Code :
  1. public static final String NEW_LINE = System.getProperty("line.separator" );
  2. // line + NEW_LINE


Message édité par darklord le 13-06-2003 à 11:49:57

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 11:51:24    

houla merci :)

Reply

Marsh Posté le 13-06-2003 à 11:53:07    

Autant pour moi mais j'avais la flemme de chercher le nom de propriété dans la doc.

Reply

Marsh Posté le 13-06-2003 à 11:57:10    

phnatomass a écrit :

Autant pour moi mais j'avais la flemme de chercher le nom de propriété dans la doc.


 
;)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 11:59:25    

et euh.... désolé de vous déranger, mais pour mes caractères bizarres ? :)
 
là j'ai des carrés entre chaque caractère, à l'écriture comme à la lecture... donc le pb vient bien de l'écriture et de mes writeChars (String)....
 
 
Merci :)

Reply

Marsh Posté le 13-06-2003 à 12:02:45    

pilou51 a écrit :

et euh.... désolé de vous déranger, mais pour mes caractères bizarres ? :)
 
là j'ai des carrés entre chaque caractère, à l'écriture comme à la lecture... donc le pb vient bien de l'écriture et de mes writeChars (String)....
 
 
Merci :)


 
bah, ton fichier txt a surement un format a la con. T'essaie pas de lire un fichier crée sous windows avec linux par hasard?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 12:07:16    

nope, sous windows avec windows... et comme je l'ouvre qu'avec java (pas avec une application intermédiaire), je suis surpris de trouver ces caractères à la c**... :)

Reply

Marsh Posté le 13-06-2003 à 12:10:23    

pilou51 a écrit :

nope, sous windows avec windows... et comme je l'ouvre qu'avec java (pas avec une application intermédiaire), je suis surpris de trouver ces caractères à la c**... :)


 
et si tu l'ouvres avec notepad (j'ai bien dit notepad pas autre chose) ca dit quoi?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 12:11:36    

avec notepad j'ai pas les carrés rajoutés, à part pour les sauts de ligne (ce qu'il fait avec tous les fichiers)...

Reply

Marsh Posté le 13-06-2003 à 12:29:06    

pilou51 a écrit :

avec notepad j'ai pas les carrés rajoutés, à part pour les sauts de ligne (ce qu'il fait avec tous les fichiers)...


 
y a des accents dans ton fichier?
 
essaie un autre fichier qui a un contenu tout simple avec seulement des caractères sans accents


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 13-06-2003 à 12:44:19    

pilou51 a écrit :

avec notepad j'ai pas les carrés rajoutés, à part pour les sauts de ligne (ce qu'il fait avec tous les fichiers)...


 
C'est pas du texte sous codage Unicode ?

Reply

Marsh Posté le 13-06-2003 à 13:32:31    

Y'a que des chiffres et des ":"
Comment je fais pour choisir le type de codage svp ? :)


Message édité par pilou51 le 13-06-2003 à 13:32:57
Reply

Marsh Posté le 13-06-2003 à 14:26:10    

up  :bounce:

Reply

Marsh Posté le 13-06-2003 à 14:39:52    

Peux tu rappeler de manière général qu fais ton prog.
Au début tu dis que tu lis un ficher et que tu place dans un champ texte java, ensuite tu parle de fichier qui contient des caracteres bizzares sous notepad.
Ou est le rapport entre les 2 ?

Reply

Marsh Posté le 13-06-2003 à 14:44:12    

euh désolé pour la clarté, je reprends tout depuis le début :  
 
mon prog récupère des chaînes de caractère dynamiquement (pour l'instant c statique, mais peu importe) et les stocke ds un fichier... Cette récupération peut s'étaler sur plusieurs jours (période de vacances).
 
Au retour des vacances, l'utilisateur clique sur un bouton et visualise le contenu du fichier de log enregistré. Le tout étant multi-plateforme, je ne veux pas me contenter de faire un lien vers le fichier .txt, je veux l'afficher ds une fenetre java.
 
Pour l'instant, lorsque je regarde le fichier enregistré, ou que je l'affiche, j'ai des  carrés qui viennent se rajouter entre chaque caractère. Voilou, j'espère que ça t'aidera (à m'aider :D )
 
Merci

Reply

Marsh Posté le 13-06-2003 à 14:49:40    

Pour ecrire dans un fichier texte utilise un Filewriter et appele la méthode write(String str)

Reply

Marsh Posté le 13-06-2003 à 14:56:36    

là je fais :

Code :
  1. FileWriter f = new FileWriter("c:\\appelslogges.txt" );
  2.       PrintWriter file = new PrintWriter(f);
  3.       file.write(donnerHeure().toString() + " : " );
  4.       file.write(numcache.getText().toString() + NEW_LINE);


et ça me sort un fichier vide (0Ko). Idem si je fais sans le PrintWriter, directement le write du FileWriter...
De plus, comment puis-je faire pour me positionner à la fin du fichier pour rajouter des données (ces write se trouvent dans une boucle while(1)...)
 
Merci :jap:

Reply

Marsh Posté le 13-06-2003 à 15:00:05    

Inutile d'utiliser un PrintWriter
dans ton cas file.flush(); lorsque t' as finit d'écrire tout tes éléménts
 
Pour aller à la fin d'un fichier RandomAccesFile est ton amis.
Avec un seek(ton_fichier.length());


Message édité par phnatomass le 13-06-2003 à 15:03:30
Reply

Marsh Posté le 13-06-2003 à 15:02:47    

vi j'utilisais bien un RandomAccessFile avant, avec son writeChars(string)... je vais coupler les 2 alors.
Là, meme avec un flush() devant, ça m'écrit toujours rien ds le fichier :(

Reply

Marsh Posté le 13-06-2003 à 15:04:29    

Mon code d'écriture complet, au cas où je me planterais vraiment... :  

Code :
  1. try {
  2.       RandomAccessFile fichier = new RandomAccessFile("c:\\appelslogges.txt", "rw" );
  3.       fichier.seek(fichier.length());
  4.       //fichier.writeChars(donnerHeure().toString() + " : " );
  5.       //fichier.writeChars(numcache.getText().toString() + NEW_LINE);
  6.       fichier.close();
  7.       FileWriter f = new FileWriter("c:\\appelslogges.txt" );
  8.       PrintWriter file = new PrintWriter(f);
  9.       file.flush();
  10.       file.println(donnerHeure().toString() + " : " );
  11.       file.write(numcache.getText().toString() + NEW_LINE);
  12.     }
  13.     catch (Exception e) {
  14.       System.out.println("Erreur"+e.toString());
  15.     };

Reply

Marsh Posté le 13-06-2003 à 15:06:19    

Le flush c'est apres avoir ecrit le fichier.(juste avant de le fermer par exemple )

Reply

Marsh Posté le 13-06-2003 à 15:09:55    

youpi ça marche, il me met plus de carac bizarre :D  
 
par contre, il m'écrit qu'une seule fois, il rajoute pas à la fin :(

Reply

Marsh Posté le 13-06-2003 à 15:21:26    

Voilà ton prog

Code :
  1. RandomAccessFile fichier = new RandomAccessFile("c:\\appelslogges.txt", "rw" );
  2. fichier.seek(fichier.length());
  3. fichier.write(donnerHeure().toString() + " : ".getBytes());
  4. fichier.write((numcache.getText().toString() + NEW_LINE).getBytes());
  5. fichier.flush();
  6. fichier.close();


Sinon serieusement sans vouloir être méchant. Quand on te tuyaute sur une classe ou une méthode passe un peut de temp à lire la doc /et ou javadoc et essaye de reellement comprendre le fonctionnement de ce que tu écris


Message édité par phnatomass le 13-06-2003 à 15:23:01
Reply

Marsh Posté le 13-06-2003 à 15:26:07    

vi je veux bien mais...
 
y'a pas de write(String) dans RandomAccessFile, y'a que le writeChars que j'utilisais tout à l'heure et qui me rajoute des caractères....... ni de flush d'ailleurs :( si je galère c parceque j'essaie de combiner RandomAccessFile et le FileWriter dont tu m'as parlé plus haut... après, désolé si j'ai l'air un peu boulet, mais on se change pas :)

Reply

Marsh Posté le 13-06-2003 à 15:28:10    

Au fait t'as éssayé le code que je t'ai donné

Reply

Marsh Posté le 13-06-2003 à 15:31:02    

vivi et c celui que j'avais au début (sauf qu'il faut changer write en writeChars et enlever flush parceque ça n'existe pas sous RandomAccessFile), qui permet bien de rajouter des trucs en fin de fichier, mais me met ces fichus carrés :(
Merci bcp d'essayer en tt cas... :jap:

Reply

Marsh Posté le 13-06-2003 à 15:34:26    

Ok.
Mais t'as essayé write(byte [] b);
en appelant la méthode getBytes() sur tes String ?

Reply

Marsh Posté le 13-06-2003 à 15:37:04    

oui, et ça fait des trucs encore plus bizarres, en plus des carrés j'ai des @ et autres caractères spéciaux :)

Reply

Marsh Posté le 13-06-2003 à 16:05:33    

Voila un exemple de programme qui tourne parfaitement chez moi.
Je ne sais pas si ça ressemble un peu à ce que tu veux faire.

Code :
  1. import java.io.*;
  2. public class Tester
  3. {
  4.    public static final String NEW_LINE = System.getProperty("line.separator" );
  5.    public static void main(String [] argv)
  6.    throws IOException
  7.    {
  8.      RandomAccessFile raf = new RandomAccessFile(new File("test.txt" ), "rw" );
  9.      raf.seek(raf.length());
  10.      for(int minute=0; minute<60; minute+=5){
  11.        int heure =(int) (System.currentTimeMillis()/10000L) % 24;
  12.        raf.write((heure + ":" + minute + NEW_LINE).getBytes());
  13.      }
  14.      raf.close();
  15.    }
  16. }


Message édité par phnatomass le 13-06-2003 à 16:31:35
Reply

Marsh Posté le 13-06-2003 à 16:12:35    

ouiiiiiiiiii ça marche enfin, merci infiniment :D
 
en fait, c t vraiment une connerie et je comprends pas vraiment, j'ai viré le + dans mes write, et séparé en 2 (en faisant 2 fois getBytes() du coup) et là ça marche :)
 
merci pour ta patience aussi  :whistle:  :jap:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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