View Javadoc

1   package com.imcode.util;
2   
3   import java.io.IOException;
4   import java.io.PushbackReader;
5   import java.io.Reader;
6   
7   /***
8    * A reader that doesn't eat newlines like BuffereReader does.
9    * 
10   * @author kreiger
11   */
12  public class LineReader {
13  
14      private final PushbackReader reader ;
15      private final int expectedMaximumLineLength;
16  
17      private int linesRead ;
18  
19      public LineReader(Reader reader) {
20          this(reader, 96) ;
21      }
22  
23      public LineReader(Reader reader, int expectedMaximumLineLength) {
24          this.reader = new PushbackReader(reader) ;
25          this.expectedMaximumLineLength = expectedMaximumLineLength;
26      }
27  
28      public int getLinesRead() {
29          return linesRead;
30      }
31  
32      public String readLine() throws IOException {
33          StringBuffer line = new StringBuffer(expectedMaximumLineLength);
34          for ( int c = reader.read(); -1 != c; c = reader.read() ) {
35              line.append( (char)c );
36              if ( '\n' == c ) {
37                  break;
38              } else if ( '\r' == c ) {
39                  c = reader.read() ;
40                  if ( '\n' == c ) {
41                      line.append( (char)c ) ;
42                  } else if ( -1 != c ) {
43                      reader.unread(c);
44                  }
45                  break ;
46              }
47          }
48          if ( line.length() == 0 ) {
49              return null;
50          }
51          linesRead++ ;
52          return line.toString();
53      }
54  
55  }