Chaine de charactéres [resolu] - Java - Programmation
Marsh Posté le 31-07-2008 à 20:42:17
bah tu la lis et ensuite tu ouvres un fichier en mode binaire et tu écris les octets de ta String. Il est où ton programme ?
Marsh Posté le 31-07-2008 à 21:19:19
oui mais ca ne fonctionne pas....je l'a lis, je l'écris ds mon fichier binaire mais qd j'essaye de l'a lire a partir du fichier, ca n'affiche que le premier mot...
Marsh Posté le 31-07-2008 à 22:13:50
ma méthode pour écrire dans le fichier :
public void ajout() throws IOException
{
DataOutputStream fw = new DataOutputStream(new FileOutputStream ("Voiture",true));
fw.writeInt(a);
fw.writeUTF(b);
fw.writeUTF(c);
fw.writeInt(d);
fw.writeUTF(e);
fw.writeInt(f);
fw.writeUTF(g);
fw.writeUTF(h);
fw.writeUTF(i);
fw.writeInt(j);
fw.writeUTF(k);
fw.writeInt(l);
fw.close();
}
ma méthode pour lire:
public void affiche() throws IOException
{
DataInputStream entree = new DataInputStream(new FileInputStream ("Voiture" ));
boolean eof = false;
while(!eof )
{
try
{
System.out.println(entree.readInt());
System.out.println(entree.readUTF());
System.out.println(entree.readUTF());
System.out.println(entree.readInt());
System.out.println(entree.readUTF());
System.out.println(entree.readInt());
System.out.println(entree.readUTF());
System.out.println(entree.readUTF());
System.out.println(entree.readUTF());
System.out.println(entree.readInt());
System.out.println(entree.readUTF());
System.out.println(entree.readInt());
}
catch(EOFException e)
{
eof = true;
}
}
entree.close();
}
Marsh Posté le 31-07-2008 à 22:46:55
Je dirais que là tu écrits une structure dans un fichier.
Et à partir de là, pour repérer quand une chaîne se termine et qu'on passe à la suivante, c'est chaud.
Donc à mon avis tu dois écrire ta chaîne "paddée" vers la droite avec des espaces de façon à toujours faire la même taille, et relire le nombre exact de caractères enregistrées, puis en trimant la chaîne obtenue.
A moins que Java propose des méthodes un peu plus glorieuses pour gérer des fichiers de type "record".
-- Edit : A priori j'ai rien dit. De ce que je comprends de la doc writeUTF enregistre le nombre de caractères que mesure la chaîne au début de l'écriture.
Marsh Posté le 01-08-2008 à 00:09:26
le plus simple serait peut-être d'enregistrer ma chaine dans un tableau de String et ensuite d'écrire les mots de ma chaine 1 par 1 dans le fichier a l'aide d'une boucle....
cela pourrait il fonctionner?
Marsh Posté le 01-08-2008 à 08:21:51
Non mais ce serait pas mal que tu nous dises ce que tu veux faire parce que entre "je veux écrire et lire une chaine" et le code que tu as posté, ça n'a pas grand chose à voir.
Visiblement, tu ne veux pas enregistrer une chaine, mais une structure de données. Dans ce cas une solution est de définir ta structure dans une classe, que tu sérialises.
http://java.sun.com/developer/tech [...] alization/
http://louis.cova.neuf.fr/blocs-notes/page6.html
Marsh Posté le 01-08-2008 à 13:09:17
ok je vais essayer d'être plus clair...
en fait je voudrais saisir une phrase au clavier ( par exemple: bonjour tout le monde)
Ensuite, envoyer cette phrase à ma methode ajout() pour l'écrire ds mon fichier binaire
public void ajout() throws IOException
{
DataOutputStream fw = new DataOutputStream(new FileOutputStream ("Voiture",true));
fw.writeUTF(b); //en supposant que "b" contient ma phrase
fw.close();
}
une fois la phrase écrite dans le fichier, je voudrais l'a lire à partir de ma méthode affiche()
public void affiche() throws IOException
{
DataInputStream entree = new DataInputStream(new FileInputStream ("Voiture" ));
boolean eof = false;
while(!eof )
{
try
{
System.out.println(entree.readUTF()); //affichage
}
catch(EOFException e)
{
eof = true;
}
}
entree.close();
}
Mon probléme est que si je déclare la variable b en String et que je saisis une phrase, il n'y aura que le premier mot de ma phrase qui sera stockée dans b ....dans ce cas ci, b contiendra uniquement le mot "bonjour" et donc seul le mot "bonjour" sera écrit dans le fichier
Marsh Posté le 01-08-2008 à 13:31:12
Alors pour la lecture au clavier:
http://www.commentcamarche.net/for [...] er-en-java (google 10 s)
Ensuite, est-ce obligatoire d'écrire en UTF ?
Marsh Posté le 01-08-2008 à 13:34:43
el muchacho a écrit : Ensuite, est-ce obligatoire d'écrire en UTF ? |
je pense que la relecture avec readUTF prends correctement en compte ce ushort qui est écrit en premier. enfin, j'espère. parceque sinon c'est une belle merde, m'enfin ça me paraît un peu gros
du coup je ne vois pas d'inconvéniant à utiliser ce système...
en tout cas, le troncage de la chaîne ne peut pas venir de writeUTF ou readUTF. ou alors il y a un sérieux problème dans la JVM...
Marsh Posté le 01-08-2008 à 13:37:46
Non mais si c'est juste pour lire une chaîne de caractères, un simple readline suffit.
Marsh Posté le 01-08-2008 à 13:42:48
ben non un readline lit une ligne dans un fichier texte
vu sa structure, il travaille plutôt dans un fichier binaire, donc là ça me semble tout à fait normal qu'il écrive comme ça, d'autant qu'il stock aussi des nombres. à mon avis le problème vient en amont.
même si je fais pas de java, le code qu'il a posté ne me semble pas présenter d'erreur. à mon avis c'est la phase de récupération de la saisie au clavier qui merde (ou je ne sais quel autre obscure traîtement qui est fait dessus ensuite)
Marsh Posté le 01-08-2008 à 14:02:04
Le monsieur a dit: "en fait je voudrais saisir une phrase au clavier ( par exemple: bonjour tout le monde). Ensuite, envoyer cette phrase à ma methode ajout() pour l'écrire ds mon fichier binaire "
C'est totalement contradictoire avec le code posté à l'origine, j'en conviens, mais c'est ce que je lis.
Alors faut-il décrypter cela en "en fait, je fais des inputs au clavier, d'une phrase, puis d'un nombre, puis d'une autre phrase", auquel cas l'UTF semble superflu, ou bien "j'entre des champs depuis une IHM", ou je ne sais quoi d'autre, le tout mâtiné de code foireux, j'en sais rien. Et effectivement, il se peut tout-à-fait que le problème soit totalement ailleurs, vu la façon dont c'est présenté, on nage dans le flou total. C'est le 3e dans le genre cette semaine et j'avoue que le jeu des devinettes, ça commence un peu à me lasser.
Marsh Posté le 01-08-2008 à 14:14:14
ben quoi ? on va bientôt pouvoir faire une pétanque avec nos boules de crystal
Marsh Posté le 01-08-2008 à 14:30:17
c'est bon le probléme est résolu en faisant
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
br.readLine();
Merci pour vos conseils et désolé si les informations que je vous ai fournis n'ont pas été trés clair pour vous mais je suis débutant en java et en programmation d'un point de vue général.
Merci encore
Marsh Posté le 01-08-2008 à 15:31:36
je te jure que moi ça me fait peur...
tu relis en mode texte à coups de readline un fichier binaire créé à coup de writeUTF ???
Marsh Posté le 01-08-2008 à 16:28:42
je ne relis pas le fichier binaire à coups de readLine...
br.readLine(); me permet d'entrer une chaine...
si je fais:
String a;
a=br.readLine(); //a l'exécution je vais rentrer une chaine au clavier,
// cette chaine sera stockée dans a
ensuite j'écris cette chaine dans le fichier binaire ac writeUTF et je fais un readUTF pour lire cette chaine à partir du fichier.
En tout cas, ca fonctionne...
Marsh Posté le 01-08-2008 à 16:47:39
ah ok !
br c'est ton streamIn de la console
je croyais que c'était ton fichier, c'est pour ça j'ai eu très très peur
Marsh Posté le 01-08-2008 à 18:09:59
héhé ^^
de toute facon, lire un fichier binaire à coups de readline() , ca m'aurait donné une erreur de compilation.
Merci a tous
Marsh Posté le 31-07-2008 à 16:30:22
Bonjour a tous,
J'aimerai savoir comment faire pour saisir une phrase ( par exemple: "bonjour tout le monde" ) et ensuite l'a stocker dans un fichier binaire....?
Message édité par kiooik le 01-08-2008 à 14:31:54