web-dev-qa-db-ja.com

スキャナーでファイルまたはファイルリーダーを使用しますか?

免責事項:私は見つけることができるすべての質問を調べましたが、どれもこの正確な質問に答えていません。見つけたら、私にそれを教えて、礼儀正しくしてください。

したがって、 Oracle I/Oチュートリアル は、次のようにスキャナーでテキストファイルを開きます。

_new Scanner(BufferedReader(FileReader("xanadu.txt")));
_

しかし、 Javadoc は、次のようにスキャナーでテキストファイルを開きます。

_new Scanner(new File("myNumbers"));
_

特に私が小さなファイルを持っていて、小さなバッファで生きることができるときは、もっと簡単な方法を使うのがいいでしょうが、ファイルを直接開くと 閉じることができない)と言われることもあります 。その場合、なぜそのイディオムが公式ドキュメントで使用されているのですか?

編集:私もnew Scanner(FileReader("blah.txt"));を見ましたが、これは両方の世界で最悪のようです。

編集:私はスキャナーを使用するかどうかについての議論を始めようとはしていません。スキャナーの使い方について質問があります。ありがとうございました。

14
orbfish

Scannerの実装を見ることができます(JDKにはソースコードが付属しています)。 Scannerクラスにもclose()メソッドがあります。基本的に、リストした両方のアプローチは、小さなファイルを読み取るユースケースと同じです。最後にclose()を呼び出すことを忘れないでください。

5
maximdim

Fileクラスには、ディスクファイルを抽象化するだけなので、close()メソッドはありません。これはファイルへの入力ストリームではないため、閉じるものはありません。

2
Tudor

はい、できます。

基本的にあなたはします:

Scanner file = new Scanner(new FileReader("file.txt"));

文字列を読み取るには:

String s = file.next();

ファイルが完成したら、

file.close();
1
Jim Gao

コースのための馬。 Scanner javadocsから、Scannerは「A simpleテキストスキャナーであり、正規表現を使用してプリミティブ型と文字列を解析できます。」ですから、あなたの質問に対する私の見解は、どのアプローチを使用するかは問題ではありません。ファイルのより単純なオプションは、Oracleチュートリアルにあるものと同じくらい優れています。スキャナーはテキストファイルのトークン化に便利であり、あなたが言ったようにファイルが小さい場合は完璧にフィットします。

スキャナーは正規表現を使用するため、スキャナー用のバッファー付きファイルリーダーを作成するかどうかに関係なく、スキャナーで大きなパフォーマンスを期待することはできません。基になるReadableはclose()d(Closeableの場合、Scanner(File)コンストラクターを使用する場合)であるため、Scannerオブジェクトをclose()する限り心配する必要はありません。 (またはtry-with-resourcesを使用します)。

1
Peter Perháč