Java FileReader和File的区别

3

我希望创建一个File/FileReader对象以实例化Scanner对象。

所以,教材上是这样写的:

File file = new File("filename.txt");

然而,我们的讲师却说,那是错误的,正确的方法是:
FileReader file = new FileReader("filename.txt");

两者都可以使用。那么,它们之间有什么区别,哪一个是正确的呢?

4
定义"工作"。这两个术语意在不同的目的。 - Sotirios Delimanolis
1
File 只是一个文件对象。FileWriter 是一个可以向文件中写入内容的对象。这两者是非常不同的东西。 - Jens
2
据我所知,FileWriter 用于写入文件,而 Scanner 用于读取文件。File 类旨在表示系统中的文件。 - Luiggi Mendoza
一个很大的区别是,有一个接受File参数的Scanner构造函数,但没有一个接受FileWriter参数的构造函数。 - azurefrog
@SotiriosDelimanolis:所谓“正常工作”,是指在使用它们之一来实例化Scanner对象时没有编译错误。哪一个用于什么目的,请详细说明一下,伙计。 - Boyyett
哦,天啊...整个问题现在都白费了吗? :( - Boyyett
1个回答

7
File(String name)

通过将给定的路径名字符串转换为抽象路径名,创建一个新的文件实例。如果给定的字符串是空字符串,则结果是空的抽象路径名。
FileWriter(String name)

构造一个 FileWriter 对象,给定一个文件名。
基本上,不同之处在于仅实例化 File 不允许您写入它,而 FileWriter 可以。
FileWriter 的构造函数将新的 FileOutputStream 传递给 OutputStreamWriter,后者从给定的名称实例化一个 File。
请注意,Scanner 用于读取文件而不是写入文件。
编辑:回答您修改后的问题,将FileWriter更改为FileReaderFileFileReader之间的主要区别在于File没有close方法,而FileReader有,并实现了CloseableFile对象提供的大多数方法都是用于直接操作文件(检查是否存在、删除、创建、列出目录中的所有文件)。正如@Pshemo所提到的,File不应被视为数据,而仅仅是一个路径。

我建议阅读File APIFileReader API


非常非常非常抱歉,我是指FileReader,而不是FileWriter。现在怎么办? - Boyyett
1
另外,File对象允许您对文件进行操作(检查是否存在、删除、确定长度等)。FileReader对象仅用于读取文件。 - David G
@Boyyett 大多数(如果不是全部)可关闭的实例也会关闭它们包装的资源。因此,如果您关闭使用FileReader初始化的Scanner,则该读取器也将被关闭(这就是为什么我们不应该小心地关闭从System.in读取的扫描仪)。 - Pshemo
老实说,我倾向于使用new Scanner(new File("path")),因为它的书写更短。它们两个几乎会做相同的事情。是的,它们两个都可以使用。 - Jean-François Savard
1
@Boyyett "我们不应该关闭使用System.in对象实例化的Scanner对象吗?" 不用,如果你想在当前运行的应用程序中从用户读取更多数据使用System.in。这就是为什么我喜欢创建一个Scanner实例,并在需要时重复使用它,在我的应用程序生命周期结束时关闭它,以让编译器高兴。 - Pshemo
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接