【问题标题】:How to build a FileReader and BufferedReader constructor in Java?如何在 Java 中构建 FileReader 和 BufferedReader 构造函数?
【发布时间】:2018-08-23 19:09:40
【问题描述】:

我目前正在做一个项目,在该项目中我正在构建一个项目,该项目读取文件并计算单词和其他出现的次数(例如单词“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 吗?我将如何进行测试?

【问题讨论】:

  • 构造函数用于初始化变量,这就是您在示例中所做的基本工作。我认为你所做的是完全有效的。
  • 顺便说一句,如果在初始化后立即关闭它们,则不能使用 FileReader 和 BufferedReader。最好在您要创建的每个方法中使用新对象初始化 fr 和 br 引用。并使用 Close-with-resources,这样对象将自动为您关闭。请参阅本教程以了解如何做到这一点tutorials.jenkov.com/java-io/bufferedreader.html

标签: java bufferedreader filereader


【解决方案1】:

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

顺便说一句,构造函数应该仅用于初始化目的。我的建议是在构造函数中初始化 BufferedReader 和 FileReader,关闭它们

protected void finalize() throws Throwable {}

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

【讨论】:

  • AutoCloseable 的实例通常在垃圾收集时关闭。虽然我建议让类实现 AutoCloseable 然后在 try-with-resources 块中使用它。
  • finalize 现在已弃用。 docs.oracle.com/javase/9/docs/api/java/lang/… 不要覆盖 finalize
  • 你说得对,我说的是 Java 8。如果他只想在构造函数中初始化流并在方法中执行操作,他不能使用 try-with-resources
猜你喜欢
  • 2012-01-10
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多