View Javadoc

1   package com.imcode.util;
2   
3   import java.io.Reader;
4   import java.io.IOException;
5   
6   /***
7    * @author kreiger
8    */
9   public class LineReader {
10  
11      private Reader reader ;
12      private int linesRead = 0 ;
13  
14      public LineReader(Reader reader) {
15          this.reader = reader ;
16      }
17  
18      public int getLinesRead() {
19          return linesRead;
20      }
21  
22      private char lastChar;
23  
24      public synchronized String readLine() throws IOException {
25          StringBuffer line = new StringBuffer();
26          int c;
27          if ( 0 != lastChar ) {
28              lastChar = 0;
29              c = lastChar;
30          } else {
31              c = reader.read();
32          }
33          boolean lastWasCR = false;
34          for ( ; -1 != c; c = reader.read() ) {
35              if ( lastWasCR ) {
36                  lastWasCR = false;
37                  if ( -1 != c && '\n' != c ) {
38                      lastChar = (char)c;
39                      linesRead++ ;
40                      return line.toString();
41                  }
42              }
43              line.append( (char)c );
44              if ( '\r' == c ) {
45                  lastWasCR = true;
46                  continue;
47              } else if ( '\n' == c ) {
48                  break;
49              }
50          }
51          if ( line.length() > 0 ) {
52              linesRead++ ;
53              return line.toString();
54          } else {
55              return null;
56          }
57      }
58  
59  }