Comment utiliser Java pour lire à partir d'un fichier en cours d'écriture ?

J'ai une application qui écrit des informations dans un fichier. Ces informations sont utilisées après l'exécution pour déterminer la réussite/l'échec/l'exactitude de l'application. J'aimerais pouvoir lire le fichier au fur et à mesure de son écriture afin de pouvoir effectuer ces vérifications de réussite/d'échec/d'exactitude en temps réel.

Je suppose qu'il est possible de le faire, mais quels sont les pièges impliqués lors de l'utilisation de Java ? Si la lecture rattrape l'écriture, attendra-t-elle simplement d'autres écritures jusqu'à ce que le fichier soit fermé, ou la lecture lèvera-t-elle une exception à ce stade ? Si ce dernier, que dois-je faire alors?

Mon intuition me pousse actuellement vers BufferedStreams. Est-ce la voie à suivre ?

请先 登录 后评论

2 réponses

Matthew Schinckel

Ce n'est pas Java en soi, mais vous pouvez rencontrer des problèmes où vous avez écrit quelque chose dans un fichier, mais il n'a pas encore été écrit - il peut être dans un cache quelque part, et la lecture à partir du même fichier peut ne pas être vous donne réellement les nouvelles informations.

Version courte - utilisez flush() ou tout autre appel système pertinent pour vous assurer que vos données sont réellement écrites dans le fichier.

Notez que je ne parle pas du cache disque au niveau du système d'exploitation - si vos données entrent ici, elles devraient apparaître dans un read() après ce point. Il se peut que le langage lui-même mette en cache les écritures, attendant qu'un tampon se remplisse ou que le fichier soit vidé/fermé.

请先 登录 后评论
Mike Stone

Je ne l'ai jamais essayé, mais vous devriez écrire un scénario de test pour voir si la lecture d'un flux après avoir atteint la fin fonctionnera, qu'il y ait ou non plus de données écrites dans le fichier.

Y a-t-il une raison pour laquelle vous ne pouvez pas utiliser un flux d'entrée/sortie redirigé ? Les données sont-elles écrites et lues à partir de la même application (si c'est le cas, vous avez les données, pourquoi avez-vous besoin de lire à partir du fichier) ?

Sinon, lisez peut-être jusqu'à la fin du fichier, puis surveillez les changements et cherchez là où vous vous étiez arrêté et continuez... mais faites attention aux conditions de course.

请先 登录 后评论
  • 0 abonnés
  • 0 favoris,556 Feuilleter
  • Anthony Cramp posée à 2023-03-17 14:30