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 }