100

以下のコードをご覧ください。

// A.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);

// B.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bWriter = new BufferedWriter(fileWriter);

これら2つの方法の違いは何ですか?

BufferedWriter よりも PrintWriter を使用する必要があるのはいつですか?

4

8 に答える 8

97

PrintWriterより多くのメソッド ( println) を提供しますが、注意すべき最も重要な (そして心配な) 違いは、例外を飲み込むことです

後で呼び出しcheckErrorてエラーが発生したかどうかを確認できますが、通常はPrintWriter、コンソールへの書き込みなどに使用するか、例外に悩まされたくない「クイックアンドダーティ」アプリで使用します (および長期的な信頼性は問題ではありません)。

「追加のフォーマット機能」と「例外を飲み込まない」の側面が同じクラスにバンドルされている理由はわかりません-フォーマットは、例外を飲み込みたくない多くの場所で明らかに役立ちます。BufferedWriterいつか同じ能力が手に入るといいですね…

于 2009-11-17T07:04:06.307 に答える
69

BufferedWriterPrintWriterの API リファレンスには、違いが詳しく説明されています。

PrintWriter を使用する主な理由は、println() などの printXXX メソッドにアクセスするためです。基本的に、System.out を使用してコンソールに書き込むのと同じように、PrintWriter を使用してファイルに書き込むことができます。

BufferedWriter は、ファイル (またはその他のもの) に書き込むための効率的な方法です。これは、(おそらく実装によっては) C にドロップしてファイルへの書き込みを行う前に、文字を Java メモリにバッファリングするためです。

「PrintReader」のような概念はありません。あなたが得る最も近いものはおそらくjava.util.Scannerです。

于 2009-11-17T06:57:37.057 に答える
8

TofuBeer の回答で述べたように、どちらにも専門分野があります。PrintWriter (またはその他のライター) を最大限に活用するだけでなく、バ​​ッファリングされた書き込みも使用するには、次のように必要なもので BufferedWriter をラップできます。

PrintWriter writer = new PrintWriter(
                         new BufferedWriter (
                             new FileWriter("somFile.txt")));
于 2009-11-17T07:07:32.983 に答える
7

PrintWriter は、文字モードの任意の Writer で印刷メソッドを公開するだけです。

バッファリングされたメソッドによると、BufferedWriter は よりも効率的です。また、システム プラットフォームに応じて、テキスト ファイルを正しく操作するための newLine() メソッドが付属しています。

BufferedReader は、バイトを文字に変換して、ファイルからテキストを読み取ることを許可します。行ごとに読み取ることができます。

PrintReader はありません。入力の形式に応じて、別の Reader 実装を選択する必要があります。

于 2009-11-17T07:15:35.850 に答える
0

BufferedWriter - テキストを出力文字ストリームに書き込み、文字ストリームから文字をバッファリングします。PrintWriter - オブジェクトのフォーマットされた表現をテキスト出力ストリームに出力します。

于 2017-05-15T12:22:20.687 に答える
-1

PrintWriter を使用する理由は既に述べたとおりだと思いますが、重要な理由の 1 つは、ファイル オブジェクトを直接 PrintWriter コンストラクターに渡して、使いやすくすることです。

File file=new File(“newfile.txt”);
PrintWriter pw=new PrintWriter(file);
于 2014-01-20T07:01:12.073 に答える