2016-07-13 106 views
-2

私は本当に混乱しています。 私はJavaでファイルを読み込む方法について多くの実装を見てきましたが、私が読んだほどそれが意味をなさないほどです。Java - BufferedReaderオブジェクトパスオブジェクトを初期化する

私が気づいたように、ファイルを読み取るにはBufferedReaderScanner以上にするのが好ましい方法です。

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

の代わりにちょうど: しかし、私のような例を見てきました

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

BufferedReaderScannerを初期化する理由は何でしょうか? このようにする利点はありますか?

ここで、私はもっと紛らわしいと思いますが、どこでも見て、Fileの代わりにPathオブジェクトを使用するための提案があります。 しかし、BufferedReaderPathオブジェクトで初期化するエレガントな方法が見つかりませんでした。BufferedReader & FileReaderPathを受け入れることができません。

はもちろん、単にような何か方法があります:

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

をしかし、それは混乱の多くのように見えます。 BufferedReaderに関する

私の質問は以下のとおりです。

  • 私もBufferedReaderを使用する必要がありますか?
  • FileReaderの目的は何ですか?なぜちょうど BufferedReaderStringまたはPathに初期化できませんか?
+0

はい、BufferedReaderを使用する必要があります。もう一つの質問に対する答えは、「あなたができることができるからといって、最初のものにも当てはまるべきではない」ということです。 – Shark

+0

@ Shark私は理解できません - 私はすべきだと言いましたが、私はすべきではない、と提案しました。 –

+1

する必要があります。「なぜ文字列やパスでBufferedReaderを初期化できないのですか?」というように、不必要な、おそらく複雑な部分を切り捨てるので、作業を簡単にするような回避策やショートカットがたくさんあります。しかし、あなたができるからといって、あなたがすべきことではありません。あなたの最後の質問について - 文字列で初期化できない理由は、クラスの作成者にとっては良い質問です。最終的には、もう少し読んで、具体的なケースですべきかどうかの情報に基づいた決定を下してください。 – Shark

答えて

3

私はBufferedReaderを使用すべきですか?

確かに、なぜですか?

FileReaderの目的は何ですか?

文字モードでファイルを読む。

なぜ私は文字列またはパスでBufferedReaderを初期化できませんか?

このようなコンストラクタがないため、既に存在するFileReaderになるため、冗長になります。

+0

ありがとう、そして今私は 'FileReader'をまったく使用すべきではなく、代わりに' InputStreamReader'を使うべきだと読んでいます。 私は物事を行う明確な方法があることを願っています。質問をしましたので、この作業を正しく処理する方法を理解することができました。 –

+1

「正しい方法」はありません。要件に応じていくつかの方法があります。たとえば、デフォルトではない文字セットで独自の 'InputStreamReader'を構築したい場合があります。デフォルト以外のバッファサイズを持つ 'BufferedReader';あなたの入力が全くファイルから来ていない可能性があります。 – EJP

+0

@AlexWeitzあなたがそれを理解してうれしいです。 'FileInputStream'を提案し、それが要件に適合しているかどうかを検討するのに良い時期です:) – Shark