Comment déterminer efficacement le nombre de lignes dans un fichier Java
Compter le nombre de lignes dans un fichier est une tâche courante en programmation . En Java, une approche courante consiste à lire le fichier ligne par ligne jusqu'à la fin, ce qui peut s'avérer inefficace pour les fichiers volumineux.
Une solution plus optimisée consiste à utiliser la méthode countLinesOld, qui lit le fichier octet par octet. octet et compte les occurrences du caractère de nouvelle ligne (n). Cette approche est nettement plus rapide que la lecture du fichier ligne par ligne, en particulier pour les fichiers volumineux.
public static int countLinesOld(String filename) throws IOException { InputStream is = new BufferedInputStream(new FileInputStream(filename)); try { byte[] c = new byte[1024]; int count = 0; int readChars = 0; boolean empty = true; while ((readChars = is.read(c)) != -1) { empty = false; for (int i = 0; i < readChars; ++i) { if (c[i] == '\n') { ++count; } } } return (count == 0 && !empty) ? 1 : count; } finally { is.close(); } }
Cependant, pour des performances encore plus rapides, pensez à utiliser la méthode countLinesNew, qui exploite des optimisations telles que le déroulement de la boucle et la mise en cache. le nombre de lignes pour chaque morceau de 1 024 octets du fichier.
public static int countLinesNew(String filename) throws IOException { InputStream is = new BufferedInputStream(new FileInputStream(filename)); try { byte[] c = new byte[1024]; int readChars = is.read(c); if (readChars == -1) { // bail out if nothing to read return 0; } // make it easy for the optimizer to tune this loop int count = 0; while (readChars == 1024) { for (int i=0; i<1024;) { if (c[i++] == '\n') { ++count; } } readChars = is.read(c); } // count remaining characters while (readChars != -1) { for (int i=0; i<readChars; ++i) { if (c[i] == '\n') { ++count; } } readChars = is.read(c); } return count == 0 ? 1 : count; } finally { is.close(); } }
Ces méthodes optimisées offrent des améliorations de vitesse substantielles par rapport à l'approche standard readLines, ce qui les rend idéales pour compter efficacement les lignes dans des fichiers volumineux.
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!