Exclusion Mutuelle Fichier

Bonjour,

Je travaille en java et j’ai une application que je veux utiliser sur plusieurs pc à la fois reliées sur un réseau. Ces applications doivent lire et écrire dans un fichier texte sur un serveur des numéros, genre prendre la main sur le fichier, lire 1, poser 2. Puis depuis un autre poste, l’application va lire 2 et poser 3 et ainsi de suite.

N’étant pas très a l’aise à ce niveau dans la programmation avec java, je vous demande votre avis afin de savoir quel serait le moyen le plus sur pour que ces fichiers ne lisent pas en même temps ou n’écrivent pas en même temps dans le fichier texte.

J’ai regardé un peu les mots clés synchronised, runnable ou lock, mais je n’ai pas bien saisi leur mode de fonctionnement.

Si vous pouvez me donner un peu d’aide.

Merci d’avance.

Les applications étant situées sur des PC différents, tu ne peux pas utiliser de primitives de synchronisation (synchronised, lock, …).

Le moyen le plus simple dans ton cas serait d’ouvrir le fichier en accès exclusif, pour qu’une seule application à la fois puisse y accéder. Après, tu rajoutes un contrôle d’erreur à l’ouverture des fichiers, et une nouvelle tentative automatique (en gros : si tu reçois une erreur indiquant que le fichier est en cours d’utilisation, tu attends x millisecondes et tu retentes).

Je ne saurais pas te dire quelle est la syntaxe en Java pour ouvrir un fichier en accès exclusif, mais tu devrais pouvoir trouver ça facilement :wink:
Edité le 15/07/2008 à 10:45

Normalement, si tu fais un accès exclusif, il ne devrait pas y avoir un moyen (simple) de forcer le lecteur à patienter jusqu’à libération du flux?

Et dans l’idée, tu peux par exemple faire un serveur d’écriture: celui qui veut lire ou écrire, devra passer par le serveur, qui servira de “synchronisation” (en bloquant les autres clients).

Tout ce trouve ici : * http://forum.java.sun.com/thread.jspa?messageID=2141334#2141334

On ouvre le fichier en mode exclusif, on met un temps d’attente, on lance un second programme qui essai d’accéder au fichier et cela s’avère impossible.

Je vous remercie :smiley:
Edité le 15/07/2008 à 11:05