如何在Java中构建FileReader和BufferedReader构造函数?

如何在Java中构建FileReader和BufferedReader构造函数?,java,bufferedreader,filereader,Java,Bufferedreader,Filereader,我目前正在一个项目中工作,我正在构建一个项目,该项目读取一个文件并统计单词和其他出现次数(如单词“the”出现的次数)等等。我已经看到了许多使用FileReader和BufferedReader的示例,但它们在main中使用,我希望在另一个文件的构造函数中使用它们,如下所示: import java.util.*; import java.io.*; public class TextParser { private FileReader fr; private Buffere

我目前正在一个项目中工作,我正在构建一个项目,该项目读取一个文件并统计单词和其他出现次数(如单词“the”出现的次数)等等。我已经看到了许多使用FileReader和BufferedReader的示例,但它们在main中使用,我希望在另一个文件的构造函数中使用它们,如下所示:

import java.util.*;
import java.io.*;

public class TextParser {
    private FileReader fr;
    private BufferedReader br;
    private File file;
    private String line;

    public TextParser() {

        this.file = new File("textParser.txt");
        this.br = null;

            try {

            this.fr = new FileReader(file);
            this.br = new BufferedReader(this.fr);

            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (this.br != null) {
                        this.br.close();
                    }

                    if (this.fr != null) {
                        this.fr.close();
                    }
                } catch (IOException ee) {
                    ee.printStackTrace();
                }
            }   
    }


}

在同一个类中,我希望创建每个计算发生次数的方法,然后调用main中的所有内容。我看到的大多数示例在main中都是直接这样做的,但是我可以在这样的构造函数中使用FileReader和BufferedReader吗?如何测试此代码?

这对于在构造函数中执行此代码是有效的。如果要多次使用BufferedReader,则必须重新初始化它,例如使用新实例

顺便说一下,构造函数应该只用于初始化目的。我的建议是在构造函数中初始化BufferedReader和FileReader,然后在

protected void finalize() throws Throwable {}

方法,该方法在垃圾收集器删除对象时调用,并对方法上的流执行操作。如果流有多个用途,也可以创建一个方法来重置它。

构造函数是初始化变量的工具,这是您在示例中基本上要做的。我认为你所做的是完全正确的。顺便说一句,如果你在初始化后立即关闭FileReader和BufferedReader,你就不能使用它们。最好在每个要创建的方法中使用新对象初始化fr和br引用。并使用Close with resources,这样对象将自动为您关闭。请参阅本教程,了解如何在垃圾收集时关闭
AutoCloseable
的实例。尽管我建议让类实现
AutoCloseable
,然后在
try with resources
块中使用它。
finalize
现在已不推荐使用。不要重写
finalize
。你说得对,我在和Java8说话。如果他只想在构造函数中初始化流并在方法中执行操作,则不能使用
try with resources