2016-07-13 35 views
-2

我真的很困惑。 我已经看到了很多关于如何在Java中读取文件的实现,而我阅读得越多,对我来说就越少。Java - 初始化BufferedReader对象路径对象

正如我注意到的,读取文件的首选方法是使用BufferedReader而不是Scanner。 但是,我看到的例子,如:

Scanner s = new Scanner(new BufferedReader(...); 

而不只是:

Scanner s = new Scanner(new File("foo.txt")); 

会是什么理由来初始化BufferedReader一个Scanner? 这样做有什么好处吗?

现在,我发现更令人困惑的是,无论在哪里看,都有使用Path Object而不是File的建议。 但是,我发现没有优雅的方式来初始化BufferedReaderPath对象,因为BufferedReader & FileReader不能接受Path

当然有办法,只是这样做:

Path path = Paths.get("foo.txt"); 
BufferedReader br = new BufferedReader(new FileReader(path.toFile())); 

但是,貌似很多乱七八糟的。

我就BufferedReader的问题是:

  • 应我甚至使用BufferedReader
  • FileReader的用途是什么?为什么我不能只用StringPath初始化 BufferedReader
+0

是的,你应该使用BufferedReader。对另一个问题的答案是 - “仅仅因为你可以并不意味着你应该适用于第一个问题”。 – Shark

+0

@Shark我不明白 - 你说我应该,但后来建议我不应该,这是哪一个? –

+1

你应该。至于“为什么我不能用一个字符串或路径初始化BufferedReader” - 在编程中有很多解决方法和快捷方式,它们似乎使事情变得更容易,因为它们将不必要的,可能很复杂的部分截掉了。但仅仅因为你可以不意味着你应该。至于你的最后一个问题 - 为什么不能用字符串初始化,这对于这个类的作者来说是个好问题。最后,请再阅读一些内容,并根据情况作出明智的决定,是否应该在特定情况下进行。 – Shark

回答

3

我是否应该使用BufferedReader?

当然,为什么不呢?

FileReader的用途是什么?

以字符模式读取文件。

为什么我不能用一个字符串或路径初始化BufferedReader?

因为它没有这样的构造函数,如果它确实是FileReader,它已经存在,所以它会是多余的。

+0

谢谢,现在我读到'FileReader'不应该被使用,而应该使用'InputStreamReader'。 我希望有一种明确的做事方式,我问了这个问题,以便我真正理解处理这个任务的正确方法。 –

+1

没有一个'正确的方式'。有几种方法,取决于您的要求。例如,你可能想用非默认字符集构造你自己的'InputStreamReader';或者一个非默认缓冲区大小的'BufferedReader';或者您的输入可能不是来自文件。 – EJP

+0

@AlexWeitz我很高兴你明白了。现在提出一个'FileInputStream'并考虑它是否符合要求:) – Shark