Java Java类
跟踪行号的缓冲字符输入流。该类定义了 setLineNumber(int) 和 getLineNumber() 方法,分别用于设置和获取当前行号。
- 默认情况下,行号从 0 开始。随着数据的读取,该数字在每个行终止符处递增,并且可以通过调用 setLineNumber(int) 来更改。
- 但是请注意, setLineNumber(int) 实际上并没有改变流中的当前位置;它只会更改 getLineNumber() 将返回的值。
- 一行被认为是由换行符 ('\n')、回车符 ('\r') 或紧跟换行符的回车符中的任何一个终止的。
构造函数:
- LineNumberReader(Reader in) :使用默认输入缓冲区大小创建一个新的行编号阅读器。
- LineNumberReader(Reader in, int sz) :创建一个新的行号阅读器,字符读入给定大小的缓冲区。
方法 :
- int getLineNumber() :获取当前行号。
Syntax :public int getLineNumber() Returns: The current line number
- void mark(int readAheadLimit) :标记流中的当前位置。对 reset() 的后续调用将尝试将流重新定位到该点,并且还将适当地重置行号。
Syntax :public void mark(int readAheadLimit) throws IOException Parameters: readAheadLimit - Limit on the number of characters that may be read while still preserving the mark. After reading this many characters, attempting to reset the stream may fail. Throws: IOException
- int read() :读取单个字符。行终止符被压缩为单个换行符 ('\n')字符。每当读取行终止符时,当前行号都会增加。
Syntax :public int read() throws IOException Returns: The character read, or -1 if the end of the stream has been reached Throws: IOException
- int read(char[] cbuf, int off, int len) :字符读入数组的一部分。每当读取行终止符时,当前行号就会增加。
Syntax :public int read(char[] cbuf, int off, int len) throws IOException Parameters: cbuf - Destination buffer off - Offset at which to start storing characters len - Maximum number of characters to read Returns: The number of bytes read, or -1 if the end of the stream has already been reached Throws: IOException
- String readLine() :读取一行文本。每当读取行终止符时,当前行号都会增加。
Syntax :public String readLine() throws IOException Returns: A String containing the contents of the line, not including any line termination characters, or null if the end of the stream has been reached Throws: IOException
- void reset() :将流重置为最新标记。
Syntax :public void reset() throws IOException Throws: IOException
- void setLineNumber(int lineNumber) :设置当前行号。
Syntax :public void setLineNumber(int lineNumber) Parameters: lineNumber - An int specifying the line number
- long skip(long n) :跳过字符。
Syntax :public long skip(long n) throws IOException Parameters: n - The number of characters to skip Returns: The number of characters actually skipped Throws: IOException IllegalArgumentException
程序 :
//Java program demonstrating LineNumberReader methods
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
class LineNumberReaderDemo
{
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("file.txt");
LineNumberReader lnr = new LineNumberReader(fr);
char c[] = new char[20];
//illustrating setLineNumber()
lnr.setLineNumber(0);
//illustrating set
System.out.println(lnr.getLineNumber());
//illustrating markSupported() method
if(lnr.markSupported())
{
System.out.println("mark() method is supported");
//illustrating mark method
lnr.mark(100);
}
/*File Contents
* This is first line
this is second line
This is third line
*/
//skipping 19 characters
lnr.skip(19);
//illustrating ready() method
if(lnr.ready())
{
//illustrating readLine() method
System.out.println(lnr.readLine());
//illustrating read(char c[],int off,int len)
lnr.read(c);
for (int i = 0; i <20 ; i++)
{
System.out.print(c[i]);
}
//illustrating reset() method
lnr.reset();
for (int i = 0; i <18 ; i++)
{
//illustrating read() method
System.out.print((char)lnr.read());
}
int ch;
//illustrating read() method
System.out.println(lnr.readLine());
while((ch = lnr.read())==1)
System.out.print((char)ch);
}
//close the stream
lnr.close();
}
}
输出 :
0
mark() method is supported
this is second line
This is third line
This is first line