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 plutôt besoin des N dernières lignes, 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 des 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.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!