Java文件和#x2B;用于读取文件的扫描程序对象和文件读取器对象?

Java文件和#x2B;用于读取文件的扫描程序对象和文件读取器对象?,java,file,filereader,Java,File,Filereader,我试图找出FileReader和我习惯的方法之间的区别。我看到了一个类似的问题,但并没有真正回答我的问题,是的。下面是: 我习惯的方法是这样的: import java.io.File; import java.util.Scanner; ... public static ArrayList<String> read_file(String filename) { File temp = new File(filename); Scanner input_file;

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

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;

...
导入java.io.File;
导入java.util.Scanner;
...
公共静态ArrayList读取文件(字符串文件名)
{
文件温度=新文件(文件名);
扫描仪输入文件;
ArrayList结果=新建ArrayList();
尝试
{
输入文件=新扫描仪(临时);
}
捕获(例外e)
{
System.out.printf(“错误:无法打开文件%s\n”,文件名);
返回结果;
}
while(input_file.hasNextLine)
{
String line=input_file.nextLine;
结果。添加(行);
}
输入_file.close();
返回结果;
...
我知道File对象允许我们处理存在于该字符串路径/文件名中的文件

但是,这里的File+Scanner组合与FileReader(文件文件)或FileReader(字符串文件名)对象的功能有什么区别(我不是问FileReader的不同版本,我知道重载方法/构造函数的概念)

这将有助于解释FileReader的功能以及它的使用与扫描仪的区别


提前感谢各位。

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

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

简单地说:

:一个简单的文本扫描器,可以使用正则表达式解析原语类型和字符串。优点是程序员无需担心解析输入数据并将其转换为各种原语的编写实现。这加快了开发速度,提高了可靠性,因为每个人都在使用它并经过测试

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

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

简单地说:

:一个简单的文本扫描器,可以使用正则表达式解析原语类型和字符串。优点是程序员无需担心解析输入数据并将其转换为各种原语的编写实现。这加快了开发速度,提高了可靠性,因为每个人都在使用它并经过测试

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


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

所以文件阅读器只做纯文本?还是像C中的char[]一样?不知道从哪里得到这些描述,但是“不必担心编写高效的实现”是错误的(或误导性的)与
BufferedReader
相比,
Scanner
的速度非常慢,尤其是在处理可以基于行的情况下。
Scanner
确实提供了很多不错的功能,但它几乎没有效率,除非您只考虑易用性效率,而不是性能效率。@Andreas是的,
BufferedReader
的速度更快因为它将数据读入缓冲区,并尽可能长时间地从缓冲内存中读取数据。但是,所有的解析功能都不可用。因此,文件阅读器只处理纯文本?还是像C中的字符[]?不知道从哪里得到这些描述,但是“不必担心“编写高效的实现”是错误的(或误导性的)与
BufferedReader
相比,
Scanner
的速度非常慢,尤其是在处理可以基于行的情况下。
Scanner
确实提供了很多不错的功能,但它几乎没有效率,除非您只考虑易用性效率,而不是性能效率。@Andreas是的,
BufferedReader
的速度更快比
Scanner
,因为它将数据读入缓冲区,并尽可能长时间地从缓冲内存中提供服务。但它没有所有好的解析功能。区别在于它们不同,在Javadoc中有充分的解释。具体地说,
Scanner
是在
FileRe上构建的ader
和朋友们。谢谢,但在我问这个问题之前,我阅读了Oracle关于FileReader的文档。这对我来说并不清楚。这就是我问这个问题的原因。不过,我很感谢你的建议。我会仔细看看它的方法和构造,并尝试了解它是如何工作的。虽然我有你在这里,但我如何结束这个任务ion?我把一个答案标记为已经回答了我的问题,但我仍然得到关于这个问题的通知