15.6. Ekstra eksempler

Herunder læser vi en fil og udregner filens tjeksum og antallet af linjer i filen.


import java.io.*;
import java.util.zip.*;

public class UndersoegFil
{
  public static void main(String[] args) throws IOException
  {
    FileInputStream fil = new FileInputStream("skrevet fil.txt");
    BufferedInputStream bstrøm = new BufferedInputStream(fil);
    CRC32 tjeksum = new CRC32();
    CheckedInputStream chkstrøm = new CheckedInputStream(bstrøm,tjeksum);
    InputStreamReader txtstrøm  = new InputStreamReader(chkstrøm);
    LineNumberReader ind        = new LineNumberReader(txtstrøm);

    String linje;
    while ((linje=ind.readLine())!= null) System.out.println("Læst: "+linje);

    System.out.println("Antal linjer: "  +ind.getLineNumber());
    System.out.println("Checksum (CRC):" +tjeksum.getValue());
  }
}

Resultatet bliver


Læst: person0 k 43
Læst: person1 k 10
Læst: person2 k 16
Læst: person3 k 11
Læst: person4 k 21
Antal linjer: 5
Checksum (CRC):3543848051

Læg mærke til, hvordan vi hægter datastrøm-objekterne sammen i en kæde ved hele tiden at bruge det forrige objekt i som parameter til konstruktørerne: Filindlæsning, buffering, tjeksum, gå fra binær til tekstbaseret indlæsning (InputStreamReader) og linjetælling.

While-løkken er skrevet meget kompakt med en tildeling (linje=ind.readLine()) og derefter en sammenligning, om værdien af tildelingen var null ( (..) != null).