【问题标题】:What is the difference between Java File+Scanner object for reading files and a FileReader object?用于读取文件的 Java File+Scanner 对象和 FileReader 对象有什么区别?
【发布时间】:2015-12-13 05:07:13
【问题描述】:

我试图找出 FileReader 和我习惯的方法之间的区别。我看到一个类似的问题,但并没有真正回答我的问题,它是here。所以这里是: 我习惯的方法是这样的:

import java.io.File;
import java.util.Scanner;
...
public static ArrayList<String> read_file(String filename)
{
    File temp = new File(filename);
    Scanner input_file;
    ArrayList<String> result = new ArrayList<String>();
    try
    {
        input_file = new Scanner(temp);
    }
    catch (Exception e)
    {
        System.out.printf("Error: failed to open file %s\n", filename);
    return result;
    }

    while (input_file.hasNextLine)
    {
        String line = input_file.nextLine;
        result.add(line);
    }

    input_file.close();
    return result;

...

我知道 File 对象允许我们使用该字符串路径/文件名中存在的文件..

但是这里的 File+Scanner 组合的作用与 FileReader(File file) 或 FileReader(String filename) 对象的作用有什么区别(我不是在询问 FileReader 的不同版本,我明白了重载方法/构造函数)?

这将有助于解释 FileReader 的作用以及它的使用方式与 Scanner 有何不同..

提前谢谢大家。

【问题讨论】:

  • 不同之处在于它们是不同的,在 Javadoc 中已充分解释。具体来说,Scanner 构建在 FileReader 和朋友之上。
  • 谢谢,但在我问这个问题之前,我阅读了 Oracle 关于 FileReader 的文档。这对我来说不是那么清楚。这就是我问的原因……不过我很感激这个建议。我将仔细研究它的方法和构造,并尝试弄清楚它是如何工作的。虽然我有你在这里,但我该如何结束这个问题?我将答案标记为已回答我的问题,但我仍然收到有关(没有帮助的)cmets 的通知。我要删除它吗?

标签: java file filereader


【解决方案1】:

简单来说:

Scanner:一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。优点是程序员不必担心将输入数据解析和转换为各种原语的编写实现。这既加快了开发速度,又可靠,因为它被所有人使用并经过测试。

FileReader:读取字符文件或字符流的便利类。 FileReader 提供的功能仅限于从定义的流中读取字符。剩下的工作必须由程序员来完成。

结论Scanner 为读取和解析流(文件)提供了可靠且易于使用的实现,节省了大量开发时间。

【讨论】:

  • 所以 FileReader 只处理纯文本?还是像 C 中的 char[] 一样?
  • 不知道你从哪里得到这些描述,但“不必担心编写高效实现”是不正确的(或误导)。与BufferedReader 相比,Scanner 速度非常慢,尤其是在处理可以基于行的情况下。 Scanner 确实提供了很多不错的功能,但效率并不高,除非您只考虑易用性效率,而不是性能效率。
  • @Andreas 是的,BufferedReaderScanner 快,因为它会将数据读入缓冲区并尽可能从缓冲内存中提供服务。但是它没有所有漂亮的解析功能。
【解决方案2】:

基本上,Scanner 和 FileReader 的 API 不同。这意味着您可以使用不同的方法来读取文件,具体取决于您使用的方法。扫描器尝试标记您的文件,而阅读器使您可以访问更细粒度的详细信息。扫描仪也不是特定于文件的。它可以从许多不同的输入源(如命令行)中读取。而 FileReader 专用于读取文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-26
    • 2011-09-23
    • 2013-06-26
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多