OVH Cloud OVH Cloud

Lecture d'un fichier en continu

4 réponses
Avatar
figma
Bonjour,

Je cherche =E0 lire un fichier de fa=E7on continue
Et =E0 afficher ce contenu dans un JTextPane. Ce fichier
est remplit par un autre process externe

Y a t-il un moyen de reperer quand ce fichier est modifie
et de lire les nouvelles donnees qui viennent d'etre ajoutees ?

Je vois comment lire un fichier simple,avec un FileInputStream
BufferedReader et un while (b.readLine())!=3D null)
mais pas comment g=E9rer
l'aspect lecture continue.

Quelqu'un a t il une idee ?
Merci

4 réponses

Avatar
BJB
Bonjour,

As-tu essayé avecun Reader classique par exemple et de forcer la
relecture de la fin en testant la taille du fichier pour savoir s'il à
été ajouter ?

Tu peux de plus tenter
http://java.sun.com/j2se/1.5.0/docs/api/java/io/RandomAccessFile.html
avec le bon mode afin de permettre un accès simultané ...

A essayer ;-)

A+
JB

figma wrote:
Bonjour,

Je cherche à lire un fichier de façon continue
Et à afficher ce contenu dans un JTextPane. Ce fichier
est remplit par un autre process externe

Y a t-il un moyen de reperer quand ce fichier est modifie
et de lire les nouvelles donnees qui viennent d'etre ajoutees ?

Je vois comment lire un fichier simple,avec un FileInputStream
BufferedReader et un while (b.readLine())!= null)
mais pas comment gérer
l'aspect lecture continue.

Quelqu'un a t il une idee ?
Merci



Avatar
ekse
figma wrote:
Bonjour,

Je cherche à lire un fichier de façon continue
Et à afficher ce contenu dans un JTextPane. Ce fichier
est remplit par un autre process externe

Y a t-il un moyen de reperer quand ce fichier est modifie
et de lire les nouvelles donnees qui viennent d'etre ajoutees ?

Je vois comment lire un fichier simple,avec un FileInputStream
BufferedReader et un while (b.readLine())!= null)
mais pas comment gérer
l'aspect lecture continue.

Quelqu'un a t il une idee ?
Merci



Pour savoir si ton fichier est modifié, tu fais un simple Listener qui
lance un Thread. Ce Thread, tous les X ms, vérifie la date de dernière
modification du fichier qu'il écoute.

Pour lire ce qui a été rajouté, c'est peut-être plus compliqué. Est-ce
que des données déjà lu peuvent être supprimées ou modifiées ? Si c'est
le cas et à moins que ton fichier soit trop gros, mieux vaut tout relire
et le réécrire dans ton JTextPane.

Sinon, tu utilises toujours ton FileInputStream et tu fait un skip de la
taille que tu as lu précédement, puis tu lis le reste.

Avatar
figma
Merci pour les pistes, je vais tester le thread qui scrute
la derniere modification ou la taille du fichier.

Mes donnees ne peuvent pas être supprimees ni modifiees
en fait. Mais le fichier que je relis est assez volumineux,
donc je vais essayer le skip

merci
A+
Avatar
Francis JUGE-BOIRARD
Bonjour,
j'ai du mettre au point un système répondant à ce problème. Ci dessous, le code que j'utilise pour gérer
le fichier.
for (;;)
{
String lu = "";
int bLu;
File file = new File (argv[4] + "../" + FILE_NAME);
if (file.exists ())
file.delete ();
file.createNewFile ();
file.deleteOnExit ();
FileInputStream fis = new FileInputStream (file);
for (;;)
{
bLu = fis.read ();
if (bLu == -1)
{
try
{
Thread.sleep (1000);
}
catch (InterruptedException ie)
{}
continue;
}
do
lu += (char) bLu;
while ((bLu = fis.read ()) != -1);
break;
}
parse (lu);
fis.close ();
}
Ce bout de code supprime le fichier lors du démarrage du programme puis le recré. Il nécessite donc
quelques modifications mais fonctionne correctement.