11
try{

    File file = new File("write.txt");
    FileWriter writer = new FileWriter(file);

    PrintWriter printWriter = new PrintWriter(writer);
    printWriter.println("pqr");
    printWriter.println("jkl");
    printWriter.close();

    PrintWriter printWriter = new PrintWriter(file);
    printWriter.println("abc");
    printWriter.println("xyz");
    printWriter.close();
}

私はこれらの2つの方法の違いが何であるかを理解していません。どのシナリオで、printWriterとfileWriterを使用する必要があります。

4

5 に答える 5

10

これらは両方とも内部でFileOutputStreamを使用しますが、主な違いは、PrintWriterがprintlnやprintfなどのフォーマット用の追加のメソッドをいくつか提供することです。

コードスニペット:

public PrintWriter(File file) throws FileNotFoundException {
     this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),
     false);
}


public FileWriter(File file) throws IOException {
       super(new FileOutputStream(file));
}

主な違い:

  1. IOに障害が発生した場合、FileWriterはIOExceptionをスローします。
  2. PrintWriterメソッドはいずれもIOExceptionをスローしません。代わりに、checkError()を使用して取得できるブールフラグを設定します。
  3. PrintWriterには、データのすべてのバイトが書き込まれた後にフラッシュする作成中の自動フラッシュのオプションが付属しています(デフォルトは自動フラッシュなし)。FileWriterの場合、呼び出し元はフラッシュの呼び出しに注意する必要があります。
于 2012-12-28T10:11:03.777 に答える
2

ソースから、ファイルを渡すときにPrintWriterが行うことは、バッファリングされた方法でファイルを開くことです。

public PrintWriter(File file) throws FileNotFoundException {
    this(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))),
         false);
}

FileWriterを渡すと、バッファリングせずに開きます

public FileWriter(File file) throws IOException {
    super(new FileOutputStream(file));
}

これは、最初の例の方が少し効率的であることを意味します。ただし、私にとっては単純なので、Fileなしで使用します。FileWriter

于 2012-12-28T10:11:57.020 に答える
1

PrintWriterprintlnおよびのようなフォーマットのためのいくつかの便利なメソッドを提供しますprintf。したがって、印刷されたテキストを書く必要がある場合は、それを使用できます。FileWriter文字列とchar配列のみを書き込む機能を提供する「低レベル」ライターのようなものです。基本的に、あなたが選ぶものに大きな違いはないと思います。

于 2012-12-28T10:11:48.730 に答える
0

FileWriterには基本的なメソッドのセットしかありませんが、PrintWriterには便利なメソッドの豊富なセットがあります。そのうちの1つがあなたの例にあります- PrintWriter.println

また、「このクラスのメソッドはI / O例外をスローしませんが、コンストラクターの一部はスローする可能性があります。クライアントは、checkError()を呼び出すことでエラーが発生したかどうかを問い合わせることができます」ことにも注意してください。

于 2012-12-28T10:17:06.887 に答える
0

2つの最も重要な違いの1つは、FileWriterでは既存のファイルの末尾にテキストを追加できるのに対し、PrintWriterではできないことです。

于 2021-05-16T15:05:10.577 に答える