La lecture d'une ligne spécifique à partir d'un fichier texte en Java
Est il une méthode pour lire une ligne spécifique à partir d'un fichier texte ? Dans l'API ou Apache Commons.
Quelque chose comme :
String readLine(File file, int lineNumber)
Je suis d'accord c'est trivial à mettre en œuvre, mais il n'est pas très efficace, surtout si le fichier est très gros.
Vous devez vous connecter pour publier un commentaire.
ferait, mais il a encore le problème d'efficacité.
Alternativement, vous pouvez utiliser:
Ce sera un peu plus efficace en raison de la mémoire tampon.
Prendre un coup d'oeil à
Scanner.skip(..)
et tenter de sauter des lignes entières (avec la regex). Je ne peux pas dire si ce sera plus efficace que de référence il.P. S. avec efficacité je veux dire l'efficacité de mémoire
Pas que je suis au courant.
Être conscient qu'il n'y a aucune indexation sur les fichiers de l'endroit où la ligne commence, de sorte que toute méthode utilitaire serait exactement aussi efficace que:
(avec les erreurs de manipulation des ressources et à la fermeture de la logique, bien sûr).
Si les lignes que vous étiez en train de lire ont été tous de la même longueur, puis un calcul peut être utile.
Mais dans la situation lorsque les lignes sont de longueurs différentes, je ne pense pas qu'il y ait une alternative à la lecture de l'un à la fois jusqu'à ce que le nombre de lignes est correct.
Malheureusement, sauf si vous pouvez garantir que chaque ligne du fichier est exactement la même longueur, vous allez avoir à lire le fichier en entier, ou au moins jusqu'à la ligne que vous êtes après.
La seule façon pour vous de compter le nombre de lignes est de regarder pour les caractères de nouvelle ligne dans le fichier, et cela signifie que vous allez avoir à lire chaque octet.
Il sera possible d'optimiser votre code afin de le rendre clair et lisible, mais en dessous vous serez toujours lire le fichier en entier.
Si vous allez à la lecture du même fichier à plusieurs reprises vous avez pu analyser le fichier et créer un index de stocker les décalages de certains numéros de ligne, par exemple le nombre d'octets de l'endroit où les lignes 100, 200 et ainsi de suite.
Car les fichiers sont octet et non orienté ligne - toutes les solutions générales de complexité O(n) avec n étant la taille des fichiers en octets. Vous avez de numériser l'ensemble du fichier et le compte de la ligne de délimiteurs jusqu'à ce que vous savez quelle partie du fichier que vous souhaitez lire.
goyave a quelque chose de similaire:
De sorte que vous pouvez faire
En Utilisant Le Fichier Utils:
Si vous allez travailler avec le même fichier de la même manière (la recherche d'un texte à la ligne), vous pouvez indexer votre fichier. Numéro de ligne -> offset.
Selon cette réponse, Java 8 nous permet d'extraire des lignes spécifiques à partir d'un fichier. Des exemples sont fournis dans la réponse.