40 votes

Java : Lire les n dernières lignes d'un ÉNORME FICHIER

Je veux lire les n dernières lignes d'un très gros fichier sans lire le fichier entier dans aucune zone tampon/mémoire en utilisant Java.

J'ai regardé autour des API JDK et des E/S Apache Commons et je ne suis pas en mesure d'en trouver une qui convient à cet effet.

Je pensais à la façon dont tail ou moins le fait dans Unix. Je ne pense pas qu'ils chargent tout le fichier et puis montrent les dernières lignes du fichier. Il devrait y avoir une façon similaire de faire la même chose en Java aussi.

5voto

Torsten Simon Points 76

Le ReversedLinesFileReader se trouve dans la bibliothèque Java IO d'Apache Commons.

    int n_lines = 1000;
    ReversedLinesFileReader object = new ReversedLinesFileReader(new File(path));
    String result="";
    for(int i=0;i<n_lines;i++){
        String line=object.readLine();
        if(line==null)
            break;
        result+=line;
    }
    return result;

3voto

Luca Points 81

J'ai trouvé RandomAccessFile et d'autres classes de Buffer Reader trop lentes pour moi. Rien ne peut être plus rapide qu'un tail -<#lines>. C'était donc la meilleure solution pour moi.

public String getLastNLogLines(File file, int nLines) {
    StringBuilder s = new StringBuilder();
    try {
        Process p = Runtime.getRuntime().exec("tail -"+nLines+" "+file);
        java.io.BufferedReader input = new java.io.BufferedReader(new java.io.InputStreamReader(p.getInputStream()));
        String line = null;
    //Here we first read the next line into the variable
    //line and then check for the EOF condition, which
    //is the return value of null
    while((line = input.readLine()) != null){
            s.append(line+'\n');
        }
    } catch (java.io.IOException e) {
        e.printStackTrace();
    }
    return s.toString();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X