📜  Java Java类

📅  最后修改于: 2022-05-13 01:54:32.162000             🧑  作者: Mango

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