Home / Programmazione / Java / Contare linee in un file con Java
Mattepuffo

Contare linee in un file con Java

Contare linee in un file con Java

Per contare le linee di un file, ci sono tanti modi.

Il più usato è quello di scorrere tutto il file fino alla fine, tenendo un counter che viene aggiornato ad ogni linea.

Ragionamento giusto, ma il codice "fatto in casa" risulta più lento nel caso di grandi file.

Oggi vi propongo due esempi che dovrebbero essere più performanti.

Oggi vediamo due esempi usando Java.

Il primo usa LineNumberReader, uno stream che tiene traccia del numero di linea corrente.

Il count parte da zero, e la linea si considera terminata quando trova un line feed o un carriage return.

Ecco l'esempio:

public class Main {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        String str = "/path/to/file";
        try (LineNumberReader lnr = new LineNumberReader(new FileReader(new File(str)))) {
            lnr.skip(Long.MAX_VALUE);
            System.out.println(lnr.getLineNumber() + 1);
        }
    }
}

Come vedete, al metodo getLineNumber ho sommato uno, per il discorso del count che parte da zero.

Il secondo esempio esempio usa Stream e Files di java.nio.

Nello specifico il metodo count dell'interfaccia Stream:

public class Main {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        String str = "/path/to/file";
        try (Stream lines = Files.lines(Paths.get(str), Charset.defaultCharset())) {
            long numOfLines = lines.count();
            System.out.println(numOfLines);
        }
    }
}

Hanno comportamenti diversi nel caso in cui l'ultima riga risulti vuota, quindi fate attenzione.

Ad esempio Netbeans mi segna 27 righe di cui l'ultima vuota.

Il primo esempio mostra 27, mentre il secondo 26.

Enjoy!