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 }