View Javadoc
1   package com.opencsv.stream.reader;
2   
3   import com.opencsv.ICSVParser;
4   
5   import java.io.BufferedReader;
6   import java.io.IOException;
7   
8   /**
9    * This class was created for
10   * <a href="https://sourceforge.net/p/opencsv/bugs/106/">issue #106</a>
11   * where carriage returns were being removed.
12   * This class allows the user to determine if they wish to keep or
13   * remove them from the data being read.
14   *
15   * @author Scott Conway
16   * @since 3.3
17   */
18  
19  public class LineReader {
20      private final BufferedReader reader;
21      private final boolean keepCarriageReturns;
22  
23      /**
24       * LineReader constructor.
25       *
26       * @param reader              Reader that data will be read from.
27       * @param keepCarriageReturns True if carriage returns should remain in the data, false to remove them.
28       */
29      public LineReader(BufferedReader reader, boolean keepCarriageReturns) {
30          this.reader = reader;
31          this.keepCarriageReturns = keepCarriageReturns;
32      }
33  
34      /**
35       * Reads the next line from the Reader.
36       *
37       * @return Line read from reader.
38       * @throws IOException On error from BufferedReader
39       */
40      public String readLine() throws IOException {
41          return keepCarriageReturns ? readUntilNewline() : reader.readLine();
42      }
43  
44      private String readUntilNewline() throws IOException {
45          StringBuilder sb = new StringBuilder(ICSVParser.INITIAL_READ_SIZE);
46          for (int c = reader.read(); c > -1 && c != '\n'; c = reader.read()) {
47              sb.append((char) c);
48          }
49  
50          return sb.length() > 0 ? sb.toString() : null;
51      }
52  }