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