Récupération efficace de la dernière ligne d'un fichier texte volumineux
Lors du traitement de fichiers texte volumineux, il est crucial de récupérer efficacement la dernière ligne. L'accès aléatoire peut prendre beaucoup de temps pour les fichiers volumineux, ce qui le rend peu pratique. Considérez plutôt ces solutions :
Renvoyer la dernière ligne non vide :
La fonction tail ci-dessous récupère rapidement la dernière ligne non vide d'un fichier sans charger ni parcourir tout le fichier. Il recherche la fin du fichier et lit les caractères à rebours jusqu'à ce qu'il rencontre un saut de ligne, puis construit et renvoie la dernière ligne.
public String tail(File file) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { // ... sb.append((char) readByte); } // ... }
Renvoyer les N dernières lignes :
Si vous avez besoin des N dernières lignes à la place, utilisez la fonction tail2. Il utilise une technique similaire, mais il compte les sauts de ligne pour déterminer les lignes souhaitées avant d'inverser et de construire la sortie.
public String tail2(File file, int lines) { // ... for (long filePointer = fileLength; filePointer != -1; filePointer--) { line = line 1; sb.append((char) readByte); } // ... }
Invoquer et utiliser :
File file = new File("D:\\stuff\\huge.log"); System.out.println(tail(file)); System.out.println(tail2(file, 10));
Considérations Unicode :
L'implémentation utilise l'inversion de caractères pour reconstruire les lignes. Bien que généralement efficace, cela peut entraîner des problèmes d'inversion Unicode avec des caractères tels que les accents et les chapeaux. Par conséquent, des tests approfondis sont essentiels avant d’utiliser cette approche dans différentes langues.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3