JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / src / javajs / util / LimitedLineReader.java
1 package javajs.util;\r
2 \r
3 import java.io.BufferedReader;\r
4 \r
5 /**\r
6  *  A simple class to read a designated number of bytes from a \r
7  *  file and then return them line by line, skipping lines that\r
8  *  start with #, and including the \n or \r characters at line ends.\r
9  *  \r
10  *  Generally useful for determining what sort of data a file contains.\r
11  *   \r
12  */\r
13 public class LimitedLineReader {\r
14   private char[] buf;\r
15   private int cchBuf;\r
16   private int ichCurrent;\r
17 \r
18   public LimitedLineReader(BufferedReader bufferedReader, int readLimit)\r
19     throws Exception {  \r
20     bufferedReader.mark(readLimit + 1);\r
21     buf = new char[readLimit];\r
22     cchBuf = Math.max(bufferedReader.read(buf, 0, readLimit), 0);\r
23     ichCurrent = 0;\r
24     bufferedReader.reset();\r
25   }\r
26 \r
27   public String getHeader(int n) {\r
28     return (n == 0 ? new String(buf) : new String(buf, 0, Math.min(cchBuf, n)));\r
29   }\r
30   \r
31   public String readLineWithNewline() {\r
32     while (ichCurrent < cchBuf) {\r
33       int ichBeginningOfLine = ichCurrent;\r
34       char ch = 0;\r
35       while (ichCurrent < cchBuf &&\r
36              (ch = buf[ichCurrent++]) != '\r' && ch != '\n') {\r
37       }\r
38       if (ch == '\r' && ichCurrent < cchBuf && buf[ichCurrent] == '\n')\r
39         ++ichCurrent;\r
40       int cchLine = ichCurrent - ichBeginningOfLine;\r
41       if (buf[ichBeginningOfLine] == '#')\r
42         continue; // flush comment lines;\r
43       return new String(buf, ichBeginningOfLine, cchLine);\r
44     }\r
45     return "";\r
46   }\r
47 }\r
48 \r