Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Threads et écriture dans un fichier

7 réponses
Avatar
Raphael Tagliani
Bonjour!

J'ai fait un convertisseur de fichiers. La conversion fonctionne bien,
mais je voudrais aussi pouvoir ajouter un texte à la fin du fichier.

Je crée un thread de conversion et j'attends qu'il ait terminé pour
écrire dans le flux de sortie. Malheureusement, 'check' (voir plus bas)
n'apparaît pas dans le fichier de sortie.

Voici ce que j'ai fait (ce code est dans une boucle):

-----------------------
final FileReader source = new FileReader(fileFrom);
final BufferedReader in = new BufferedReader(source);

final FileOutputStream outFile = new
FileOutputStream(selectedDirectory+"/"+outFileName);
final PrintWriter out = new PrintWriter(outFile);

// Le thread ecrit dans le buffer
Thread converter = new ConverterThread(out, in,
this.currentConverter, fileFrom);

converter.start();

// Wait indefinitely for the thread to finish
try {
converter.join();
// Finished
} catch (InterruptedException e) {
// Thread was interrupted
e.printStackTrace();
}

out.flush();
out.println("check");
out.flush();

-----------------------


Sauriez-vous quelle erreur j'ai commise? Merci!

7 réponses

Avatar
David
Le Sun, 10 Sep 2006 13:43:21 +0200, Raphael Tagliani a écrit :

Sauriez-vous quelle erreur j'ai commise? Merci!


Tout d'abord, a quoi sert le thread ?
Ensuite, as-tu pensé à faire un close() ?

Avatar
Raphael Tagliani

Sauriez-vous quelle erreur j'ai commise? Merci!


Tout d'abord, a quoi sert le thread ?
Ensuite, as-tu pensé à faire un close() ?


C'est une question légitime:
Le thread est là parce que j'utilise les convertisseurs dans d'autres
contextes (p.ex pour utiliser des pipes afin des les mettre en chaîne).

Le close() ne change rien au comportement.

merci.


Avatar
David
C'est une question légitime:


Ouf.

Le thread est là parce que j'utilise les convertisseurs dans d'autres
contextes (p.ex pour utiliser des pipes afin des les mettre en chaîne).


je ne vois pas le rapport.

Le close() ne change rien au comportement.


peux tu donner le code complet ?

Avatar
Raphael Tagliani
C'est une question légitime:


Ouf.

Le thread est là parce que j'utilise les convertisseurs dans d'autres
contextes (p.ex pour utiliser des pipes afin des les mettre en chaîne).


je ne vois pas le rapport.

Le close() ne change rien au comportement.


peux tu donner le code complet ?
Oui, volontiers, je vais te l'envoyer demain, là je dois partir. A part

ça, l'appli est bien faite, j'espère qu'elle te servira.


Avatar
fabrice-pas-despame.bacchella
On Sun, 10 Sep 2006 13:43:21 +0200, Raphael Tagliani
wrote:

Ca donne quoi ça :
// Le thread ecrit dans le buffer
Thread converter = new ConverterThread(out, in,
this.currentConverter, fileFrom) {
void start() {
super.start();
out.println("check");
};


converter.start();
Avatar
fabrice-pas-despame.bacchella
On Wed, 13 Sep 2006 09:40:30 +0200,
wrote:

On Sun, 10 Sep 2006 13:43:21 +0200, Raphael Tagliani
wrote:

Ca donne quoi ça :
// Le thread ecrit dans le buffer
Thread converter = new ConverterThread(out, in,
this.currentConverter, fileFrom) {
void start() {
super.start();
out.println("check");
};


converter.start();



Mmm, c'est pas start qu'il faut surcharger évidemment, mais la méthode
qui fait le boulot effectif.

Avatar
Raphael Tagliani
Merci beaucoup les gars!

En fait, en regardant ConverterThread, j'ai réalisé que j'avais laissé
trainer un out.close() à la fin de la méthode run... pathétique!

Si un convertisseur de fichiers qui fait des conversions 1 fichier -> 1
fichier et n fichiers -> n fichiers avec possibilité d'ajouter vos
convertisseurs personnalisés et une jolie GUI, ça vous intéresse,
faites-moi signe.

A bientôt!



On Wed, 13 Sep 2006 09:40:30 +0200,
wrote:

On Sun, 10 Sep 2006 13:43:21 +0200, Raphael Tagliani
wrote:

Ca donne quoi ça :
// Le thread ecrit dans le buffer
Thread converter = new ConverterThread(out, in,
this.currentConverter, fileFrom) {
void start() {
super.start();
out.println("check");
};


converter.start();



Mmm, c'est pas start qu'il faut surcharger évidemment, mais la méthode
qui fait le boulot effectif.