1) lire une ligne que l'utilisateur sélectionne,
Si vous n'avez besoin de lire une ligne sélectionnée par l'utilisateur qu'une seule fois ou rarement (ou si le fichier est suffisamment petit), il vous suffit de lire le fichier ligne par ligne depuis le début, jusqu'à ce que vous arriviez à la ligne sélectionnée.
Si, par contre, vous avez besoin de lire fréquemment une ligne sélectionnée par l'utilisateur, vous devez construire un index des numéros de ligne et des décalages. Ainsi, par exemple, la ligne 42 correspond à un décalage de 2347 octets dans le fichier. L'idéal serait donc de ne lire le fichier entier qu'une seule fois et de stocker l'index, par exemple dans une carte, en utilisant les numéros de ligne comme clés et les décalages comme valeurs.
2) lire les nouvelles lignes ajoutées depuis depuis la dernière lecture. Je prévois de lire le fichier toutes les 10 secondes. le nombre de lignes et je peux trouver les numéros des nouvelles lignes mais je dois lire cette ligne
Pour le deuxième point, vous pouvez simplement enregistrer le décalage actuel dans le fichier au lieu d'enregistrer le numéro de ligne actuel - mais il ne serait certainement pas mauvais de continuer à construire l'index si cela continue à fournir un avantage significatif en termes de performance.
- Utilisez RandomAccessFile.seek(long offset) pour placer le pointeur du fichier à l'offset le plus récemment enregistré (confirmez d'abord que le fichier est plus long que l'offset le plus récemment enregistré - si ce n'est pas le cas, rien de nouveau n'a été ajouté).
- Utilisez RandomAccessFile.readLine() pour lire une ligne du fichier.
- Appelez RandomAccessFile.getFilePointer() pour obtenir le décalage actuel après la lecture de la ligne et éventuellement mettre(currLineNo+1, décalage) dans l'index.
- Répétez les étapes 2-3 jusqu'à ce que vous atteigniez la fin du fichier.
Mais ne vous laissez pas emporter par l'optimisation des performances, à moins que celles-ci ne soient déjà un problème ou qu'il soit fort probable qu'elles le deviennent.