Java FilterReader

原文:https://www.studytonight.com/java-file-io/java-filterreader

在本教程中,我们将学习 Java 中的FilterReaderFilterReader 类用于对读取器流执行过滤操作。这是一个基类,当我们试图实现自己的自定义过滤方法进行阅读时。这个类覆盖了Reader 类的所有方法。如果我们扩展这个类,那么我们将自动扩展一个 Reader 类。

构造器

FilterReader 类的构造器如下所示:

构造器 描述
protected FilterReader(Reader in) 它会创建一个新的过滤读取器。

方法

FilterReader类的所有方法如下:

方法 描述
void close() 此方法关闭流并释放与其关联的任何系统资源。
void mark(int readAheadLimit) 此方法标记流中的当前位置。
boolean markSupported() 此方法告知此流是否支持 mark()操作。
boolean ready() 这个方法告诉这个流是否准备好被读取。
int read() 此方法读取单个字符。
int read(char[] cbuf, int off, int len) 此方法将字符读入数组的一部分。
void reset() 此方法重置流。
long skip(long n) 此方法跳过字符。

FilterReader 类的示例

在下面的示例中,我们实现了 FilterReader 类的 read()方法来从文件中读取数据。这里我们使用的方法没有修改,所以我们将得到与文本文件中相同的结果。在下一个示例中,我们将看到如何定制 read 方法,以便按照我们的要求以特定的格式读取数据。

package studytonight;
import java.io.FileReader;
import java.io.FilterReader;
import java.io.Reader;
public class StudyTonight 
{
    public static void main(String args[])
    {
        try
        {
            Reader reader = new FileReader("E:\\studytonight\\output.txt");  
            FilterReader filterReader = new FilterReader(reader) {};  
            int i;  
            while ((i = filterReader.read()) != -1) {  
                System.out.print((char) i);  
            }  
            filterReader.close();  
            reader.close();  
        }
        catch(Exception e)
        {
            System.out.println("Error: "+e.toString());
        }
    }
}

你好,今晚学习

输出. txt

Hello Studytonight

FilterReader 类的示例

在本例中,我们将看到如何通过覆盖类中的方法来将修改应用于 FilterReader 类的方法。这里我们将覆盖 read 方法,每当出现 `' '(空格)时,它将返回'*'` (星号)符号。为此,我们首先声明了 MyReader 类,并继承了 FilterReader 类,然后我们覆盖了上面提到的逻辑的读取方法。在输出中,我们可以看到每当出现空格时,它都会返回星号。

package studytonight;
import java.io.FileReader;
import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
class MyReader extends FilterReader
{
    protected MyReader(Reader in) 
    {
        super(in);
    }

    public int read() throws IOException
    {  
        int x = super.read();  
        if ((char) x == ' ')  
            return ('*');  
        else  
            return x;  
    }      
}

public class StudyTonight 
{
    public static void main(String args[])
    {
        try
        {
            Reader reader = new FileReader("E:\\studytonight\\output.txt");  
            MyReader filterReader = new MyReader(reader);  
            int i;  
            while ((i = filterReader.read()) != -1) {  
                System.out.print((char) i);  
            }  
            filterReader.close();  
            reader.close();  
        }
        catch(Exception e)
        {
            System.out.println("Error: "+e.toString());
        }
    }
}

你好*今晚学习

输出. txt

Hello Studytonight

FilterReader 类的示例

在这个例子中,我们实现了FIlterReader 类的各种方法。在这里,我们最初使用 StringReader 类创建了一个读取器。然后通过使用FilterReader 类的 skip()方法,它将跳过读取前 8 个字符,并指向第 9 个字符,这就是为什么当我们试图读取时,它将从第 9 个字符开始。我们可以使用ready()方法来检查读者是否准备好阅读。在程序中,我们从第 9 个位置开始向前读取 8 个字符,然后在调用 reset()方法后指针将回到初始位置。我们可以看到,当我们在重置方法后读取数据时,它会从头开始显示。

package studytonight;
import java.io.FilterReader;
import java.io.Reader;
import java.io.StringReader;
public class StudyTonight 
{
    public static void main(String args[])
    {
        try
        {
            Reader reader = new StringReader("Welcome to Studytonight"); 
            FilterReader filterReader = new FilterReader(reader){}; 
            char ch[] = new char[28];         
            filterReader.skip(8); 
            if(filterReader.ready()) 
            { 
                filterReader.read(ch); 
                for (int i = 0; i < 8; i++)  
                { 
                    System.out.print(ch[i]); 
                } 
                System.out.print("\n");        

                filterReader.reset(); 
                for (int i = 0; i <7; i++) 
                { 
                    System.out.print((char)filterReader.read()); 
                } 
            } 
            filterReader.close(); 
        }
        catch(Exception e)
        {
            System.out.println("Error: "+e.toString());
        }
    }
}

学习 欢迎

结论

在本教程中,我们学习了FilterReader方法。FilterReader 类用于对读取器流执行过滤操作。这是一个基类,当我们试图实现自己的自定义过滤方法进行阅读时。