Reading a line at a time

On the previous page we introduced the InputStreamReader used to read successive characters from a character stream, and mentioned that it was usual to wrap the latter reader in a BufferedReader. The BufferedReader class also provides an additional facility: to read a line at a time from the character stream.

To read the next line from the stream, call BufferedReader.readLine(). A benefit of this method is that it will cope with both UNIX and Windows-style line breaks1. So here is a method to count the number of lines in an ASCII text file:

  public int countASCIILines(File f) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(
            new FileInputStream(f), "US-ASCII"));
    try {
      int count = 0;
      String line;
      while ((line = br.readLine()) != null) {
      return count;
    } finally {

Notice that the readLine() method signals an end of file by returning null.

1. You've probably come across this particularly if you're a Windows user. You may have tried loading certain text files into notepad only to find that the entire file is displayed on a single line. This is because the UNIX convention is to denote line breaks by a single ASCII 10 ("newline") character, whereis in Windows the convention is still to use a character 13 ("carraige return") followed by a newline character, harking back to the days of teletype printers.