web-dev-qa-db-ja.com

バッファーリーダーとファイルリーダーおよびスキャナークラスの違い

クラスBufferedReaderFileReaderScannerの違いを誰かに説明できますか?そして、テキストファイルを読みたいときに使用するのはどれですか。

12
Charbel

上手:

  • FileReaderは、プラットフォームのデフォルトのエンコーディングを使用してファイルを読み取るReaderです(urgh)
  • BufferedReaderは別のReaderのラッパーであり、バッファリングと一度に1行を読み取る機能を追加します
  • Scannerはさまざまなソースから読み取りますが、通常はインタラクティブな入力に使用されます。個人的には、ScannerのAPIはかなり苦痛で不明瞭だと思います。

テキストファイルを読み取るには、FileInputStreamにラップしてInputStreamReaderを使用し(エンコードを指定できるようにする)、バッファリングと機能のためにBufferedReaderにラップすることをお勧めします一度に1行ずつ読みます。

または、 Guava のように、サードパーティのライブラリを使用して簡単にすることもできます。

File file = new File("foo.txt");
List<String> lines = Files.readLines(file, Charsets.UTF_8);

または、Java 7を使用している場合は、Java.nio.file.Files

Path path = FileSystems.getDefault().getPath("foo.txt");
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
15
Jon Skeet

そして、テキストファイルを読み取るための質問に従って、BufferedReaderIOExceptionを非表示にするため、Scannerを使用する必要がありますが、BufferedReaderthrowsすぐに。

BufferedReader同期されますがScannerは同期されません。

Scannerは、ストリームのコンテンツからトークンを解析するために使用されます。

BufferedReaderはストリームを読み取るだけです。

詳細については、リンク( http://en.allexperts.com/q/Java-1046/2009/2/Difference-Scanner-Method-Buffered.htm )に従ってください

1
Saurabh Sharma